我无法使用两个路由规则来保持工作
Url.Action("action", "Controller")
,无需在链接中添加new { Area = "" }
。
这可能吗? 请帮忙。
-> 是的,这是可能的。我们可以在使用“Url.Action”生成 URL 时在路由值中使用区域
-> 在 RouteConfig.cs 文件中定义默认路由 :-
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
-> 定义特定于区域的路由 :- 在该区域的 AreaRegistration 类中定义每个区域的路由,例如:-
public class MyAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "MyArea";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
name: "MyArea_default",
url: "MyArea/{controller}/{action}/{id}",
defaults: new { action = "Index", id = UrlParameter.Optional }
);
}
}
-> 不指定区域生成 URL :- 现在,当您使用 Url.Action 在默认区域内为控制器/操作生成 URL 时。这将生成 URL :- /Home/Index
<a href="@Url.Action("Index", "Home")">Home</a>
-> 为区域中的 Actionio 生成 URL :- 要为区域内的操作生成 Ul,指定区域名称。和 URL :- /MyArea/SomeController/Index
<a href="@Url.Action("Index", "SomeController", new { area = "MyArea" })">Some Action</a>
-> 遵循此代码,您可以维护默认和特定于区域的控制器/操作的路由,而无需在为默认控制器/操作生成 URL 时显式指定区域。