这是我的.Net MVC文件夹结构:
我有一个名为“Area”的单独文件夹,里面有一个名为“Restaurant”的文件夹。 在这个“餐厅”文件夹里面,我有一个名为“MenuController”的控制器,它的动作名为“Index”
我尝试使用以下代码重写“Global.asax.cs”中的(自定义路由映射)网址。
routes.MapRoute(
"RestaurantMenu", // Route name
"Restaurant/{id}", // URL with parameters
new { controller = "/Restaurant/Menu", action = "Index", id = UrlParameter.Optional }
// Parameter defaults
);
但它给了我一个HTTP 404错误。
答案 0 :(得分:2)
路径中的控制器参数应该是控制器的名称,而不是路径:
如果您的控制器名称为Menu
,请将其更改为以下方式:
routes.MapRoute(
"RestaurantMenu", // Route name
"Restaurant/{id}", // URL with parameters
new { controller = "Menu", action = "Index", id = UrlParameter.Optional }
// Parameter defaults
);
另一个奇怪的事情是:这条路线是否位于Global.asax文件中?它应该在您的RestaurantAreaRegistration.cs文件中,如下所示;
public class RestaurantAreaRegistration : AreaRegistration {
public override string AreaName {
get {
return "Restaurant";
}
}
public override void RegisterArea(AreaRegistrationContext context) {
context.MapRoute(
"RestaurantMenu", // Route name
"Restaurant/{id}", // URL with parameters
new { controller = "Menu", action = "Index", id = UrlParameter.Optional }
// Parameter defaults
);
context.MapRoute(
"Accommodation_default",
"accomm/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
那么你可以试一试。如果您想将ActionLink与此路由一起使用,请使用它:
@Html.ActionLink("MyLink", "Index", "Menu", new { id = 1, Area = "Restaurant"})
我用记事本写了上面的代码,所以可能会有一些错别字:)