我正在尝试在MVC3中创建一个新的Route
来实现链接http://localhost/Product/1/abcxyz
:
routes.MapRoute(
"ProductIndex", // Route name
"{controller}/{id}/{name}", // URL with parameters
new { controller = "Product", action = "Index", id = UrlParameter.Optional, name = UrlParameter.Optional } // Parameter defaults
);
我这样使用Route Link
:
<li>@Html.RouteLink("My Link", "ProductIndex", new { controller = "Product", id = 10, name = "abcxyz" })</li>
产品索引操作:
public ViewResult Index(int id, string name)
{
var product = db.Product.Include(t => t.SubCategory).Where(s => s.SubID == id);
return View(product.ToList());
}
网址呈现我的预期。但是当我点击它时,我收到了404错误消息
HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly
更新
我将Route
置于Default Route
之上,网址正常。但是出现了问题。我的索引页http://locahost
直接指向Index
控制器的Product
操作,但我希望它指向Index
控制器的Home
操作
答案 0 :(得分:1)
试试吧
routes.MapRoute(
"Default", // Route name
"{controller}/{id}/{name}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional, name = UrlParameter.Optional } // Parameter defaults
);
有关路由详细信息,请参阅此链接。在此链接中讨论了每种类型的路由。
答案 1 :(得分:1)
这是因为您的路线中有2个可选参数,而引擎无法确定将值设置为哪一个。请参阅我对类似问题的回答here
您可以先为您的产品控制器创建一个特定路径(使用强制ID),然后再使用通用后备路由。
routes.MapRoute(
"ProductIndex", // Route name
"products/{id}/{name}", // URL with parameters
new { controller = "Product", action = "Index", name = UrlParameter.Optional } // Parameter defaults
);