Asp.net-Mvc
帶有 Url.Action 的 MVC 屬性路由未解析路由
根據我應用的屬性路由,我無法
@Url.Action解析到我期望的 url:我的行動(SearchController 但與$$ RoutePrefix(“add”) $$)
[Route("{searchTerm}/page/{page?}", Name = "NamedSearch")] [Route("~/add")] public ActionResult Index(string searchTerm = "", int page = 1) { ... }呼叫 Url.Action
@Url.Action("Index", new { controller = "Search", searchTerm = "replaceMe", page = 1 })這會產生一個 url
/add?searchTerm=replaceMe&page=1我希望
/add/replaceMe/page/1如果我手動輸入 url,那麼它會解析為具有正確參數的正確操作。為什麼不
@Url.Action解析正確的網址?
由於您為漂亮的路線定義命名,您可以使用該
RouteUrl方法。@Url.RouteUrl("NamedSearch", new { searchTerm = "replaceMe", page = 1})由於您需要添加 url,因此您應該更新您的路由定義以將其包含在 url 模式中。
[Route("~/add")] [Route("~/add/{searchTerm?}/page/{page?}", Name = "NamedSearch")] public ActionResult Index(string searchTerm = "", int page = 1) { // to do : return something }
路線是順序敏感的。但是,屬性不是。事實上,當
Route像這樣在單個操作上使用 2 個屬性時,您可能會發現它適用於某些編譯而不適用於其他編譯,因為反射在分析自定義屬性時不保證順序。為了確保您的路由以正確的順序輸入到路由表中,您需要將
Order屬性添加到每個屬性。[Route("{searchTerm}/page/{page?}", Name = "NamedSearch", Order = 1)] [Route("~/add", Order = 2)] public ActionResult Index(string searchTerm = "", int page = 1) { return View(); }解決排序問題後,URL 會以您期望的方式解析。
@Url.Action("Index", new { controller = "Search", searchTerm = "replaceMe", page = 1 }) // Returns "/add/replaceMe/page/1"