我有一个ASP.Net MVC 3应用程序。有2个区域:
在管理区域,我有一个ManagementController和一个PropertyController。 ManagementController什么都不做,它只有一个简单的Index ActionResult而不是返回一个视图。
PropertyController有一个Index ActionResult,它返回一个包含属性列表的视图,以及一个以propertyId作为参数的Edit ActionResult。在属性索引视图中,我有一个包含属性列表的网格和一个使用以下代码编辑属性的选项:
@Html.ActionLink("Edit", "Edit","Property", new { id = item.PropertyId })
理论上,这应该重定向到我的Property Controller的Edit ActionResult,但是它会重定向到ManagementController的Index ActionResult。我的ManagementAreaRegistration文件如下所示:
context.MapRoute(null, "management", new { controller = "management", action = "Index" });
context.MapRoute(null, "management/properties", new { controller = "Property", action = "Index" });
context.MapRoute(null, "management/properties/Edit/{propertyId}", new { controller = "Property", action = "Edit" });
我的global.asax的RegisterRoutes是这样的:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
我错过了什么,为什么会重定向到错误的控制器和操作? 在此先感谢!
答案 0 :(得分:6)
您可能需要在路线值参数中指定区域:
@Html.ActionLink("Edit", "Edit", "Property", new { id = item.PropertyID, area = "Management" }, new { })
根据用于此调用的构造函数,您需要指定最后一个参数htmlAttributes,为了您的目的,该参数将为空。
答案 1 :(得分:3)
在您的路线中,您定义了一个名为propertyId not id:
的参数context.MapRoute(null, "management/properties/Edit/{propertyId}", new { controller = "Property", action = "Edit" });
试试这个:
@Html.ActionLink("Edit", "Edit","Property", new { propertyId = item.PropertyId })
答案 2 :(得分:1)
我建议使用约束。 例如,我在Global.asax中的默认路由如下:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { typeof(MyProject.Controllers.HomeController).Namespace });
然后在我的区域注册:
context.MapRoute(
"Search_default",
"Search/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { typeof(MyProject.Areas.Search.Controllers.HomeController).Namespace }
);
这意味着我获得了{AppName} /以及{AppName} / Search / Home,这两者都是一种享受。
答案 3 :(得分:0)
从任何区域到家庭做以下
Url.Action("Details", "User", new { @id = entityId, area = "" })
从家到任何地区
Url.Action("Details", "Order", new { @id = entityId, area = "Admin" })