【发布时间】:2015-11-28 00:29:26
【问题描述】:
我在从区域视图反向链接到非区域视图时遇到问题。
当前结构
Web 应用程序树:
- /Controller/BaseController.cs
- /Views/Base/Index.cshtml
- /Areas/Area1/Controller/SettingsController.cs
- /Areas/Area1/Views/Setting/Index.cshtml
默认路由配置:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
name: "Localization",
url: "{culture}/{controller}/{action}/{id}",
defaults: new { culture = "de-DE", area = "", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { area = "", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
区域路线配置:
public class Area1AreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Area1";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Photovoltaics_localized",
"{culture}/Photovoltaics/{controller}/{action}/{id}",
new { culture = "de-DE", action = "Index", id = UrlParameter.Optional }
);
context.MapRoute(
"Area1_default",
"Area1/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
注册路由配置 (Global.asax.cs)
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
[..]
问题
当我在基本视图 (/Views/Base/Index.cshtml) 中时,代码 @Html.ActionLink("My home link", "Index", "Home") 会生成我期望的链接 http://localhost:81/de-DE/Home。
当我在区域视图 (/Areas/Area1/Views/Setting/Index.cshtml) 中时,相同的代码会生成一个链接 http://localhost:81/de-DE/Area1/Home,但这指向无处。
目前尝试过
我了解到代码 @Html.ActionLink("My home link", "Index", "Home", new { area = ""}, null) 在区域视图和非区域视图中都有效,并导致正确的 http://localhost:81/de-DE/Home 视图。
问题
我怎样才能以调用没有区域作为参数的链接创建方法始终链接到基本视图/控制器的方式来构建我的路由配置?
或者有更好的解决方案来实现这一点?
我的期望是:
@Html.ActionLink("My home link", *action*, "controller")
= http://localhost:81/de-DE/动作
@Html.ActionLink("My home link", *action*, *controller*, new { area = *area*}, null)
= http://localhost:81/de-DE/区域/动作
【问题讨论】:
标签: c# asp.net asp.net-mvc asp.net-mvc-routing