【问题标题】:Generating URLs for ASP.NET MVC Area routing with subfolder为带有子文件夹的 ASP.NET MVC 区域路由生成 URL
【发布时间】:2015-07-13 12:38:32
【问题描述】:

我有一个 ASP.NET MVC 应用程序,该应用程序具有以下特殊路线的区域:

区域注册文件:

context.Routes.MapHttpRoute(
    "AccessControlApi_default",
    "accesscontrol/api/{controller}/{id}",
    new { id = RouteParameter.Optional }
    );

context.MapRoute(
    "AccessControl_dashboardwidgets",
    "accesscontrol/dashboardwidgets/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional },
    new[] { "AccessControl.Controllers.DashboardWidgets" }
);

context.MapRoute(
    "AccessControl_default",
    "accesscontrol/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional },
    new[] { "AccessControl.Controllers" }
);

第一个路由是给api的,第二个是给区域下子文件夹中的控制器和视图的,第三个是给区域下的默认控制器的。

路由一切正常,但问题在于像这样使用Url.Action

<a href='@Url.Action("Index","Home",new{area="AccessControl"})'>Go to home</a>

它总是在区域和控制器之间的 url 中注入 dashboardwidgets 关键字,如下所示:{host}/accesscontrol/dashboardwidgets/Home/Index

如何根据需要生成 url,到区域的根目录,或者到区域下的这个子文件夹??

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas


    【解决方案1】:

    我认为解决方案是在构建链接时使用命名路由。您需要从

    切换呼叫
    @Url.Action("Index","Home",new{area="AccessControl"})
    

    @Url.RouteUrl("AccessControl_dashboardwidgets", new {area = "AccessControl", controller="Home", action="Index"})
    

    @Url.RouteUrl("AccessControl_default", new {area = "AccessControl", controller="Home", action="Index"})
    

    取决于您的目标路线。

    抱歉参数混淆了,一边编辑一边做其他事情……显然要避免周一早上的多任务处理:)

    【讨论】:

    【解决方案2】:

    要使用@Url.Action 扩展方法,您需要为 routeValues 参数指定 httproute 名称,如下所示:

    @Url.Action("Index","Home", new { httproute ="AccessControlApi_default"} )
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签