問計於最好的方式來解決這個問題:URL路由參數名稱,訂單
在我的控制器我有以下作用
public ActionResult Member(string id){return View();}
在同一個控制器的另一個行動
public ActionResult Archive(string year){return View();}
在我的global.asax
routes.MapRoute(
"Archive", // Route name
"{controller}/{action}/{year}", // URL with parameters
new { controller = "Home", action = "Index", year = "" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id="" } // Parameter defaults
);
如果我將這個網址稱爲mysite.com/archive/2009,這是可行的,因爲預期帶有名稱「year」的參數的動作和第一個路由模式適用於此請求。但是如果我打電話給這個網址mysite.com/member/john它將導致這個網址mysite.com/member?id=john 因此,看起來如果我在global.asax中的第一條路線具有相同的構造但參數名稱不同,具有正確參數名稱的人將擁有正確的url(mysite.com/archive/2009),但其他人不會。我該如何解決這個問題?我可以更改路由表以期望像「param」這樣的通用參數名稱,但我需要將該動作的所有簽名更改爲「param」,並且它不是非常具有描述性(參數代替年份或參數代替id)。
又一次令人困惑,我會使用會員不是年份的ID。 – dritterweg 2010-02-23 20:23:04
對不起,做了一個編輯。重點是您需要在路由中指定該操作,以便路由類可以識別要使用的路由。此外,它使用匹配的第一條路線,因此您需要首先放置更具體的路線。 – 2010-02-23 20:29:58