【问题标题】:ASP.NET MVC 3 Area Routing TroubleshootingASP.NET MVC 3 区域路由疑难解答
【发布时间】:2011-11-15 00:59:13
【问题描述】:

我有一个区域注册为:

public override void RegisterArea(AreaRegistrationContext context) {
    context.MapRoute("CPanel_default",
        "CPanel/{controller}/{action}/{id}/{*urlData}",
        new { id = UrlParameter.Optional, urlData = UrlParameter.Optional });
}

这条路线打算填满多个url:

  • /cpanel/home/index
  • /cpanel/entity/edit/20
  • /cpanel/entity/edit/20/abitrary-url-data

Haack 的路由调试器向我展示了该路由以这种能力运行。但是,我用于生成操作链接的代码最近发生了故障,我无法找出故障的原因。

正在使用以下代码生成操作链接:

public static MvcHtmlString CpanelLink(this HtmlHelper @this, string linkText, 
    string actionName, string controllerName, string areaName = "CPanel") {

    return @this.ActionLink(linkText, 
        actionName, new { controller = controllerName, area = areaName });
}

据我所知,这应该说明区域路线中的所有必填字段。调试显示 CpanelLink 正在返回 <a href="">...</a>,一个没有任何内容的链接。

编辑

其他故障排除发现路由参数 {*urlData} 正在杀死 Html.CpanelLink。减少到“CPanel/{controller}/{id}”的路由可以解决问题,但会破坏依赖于 urlData 参数的 url。

【问题讨论】:

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


    【解决方案1】:

    问题是您不能将控制器名称作为路由参数传递。

    您需要使用以下 ActionLink() 方法签名

    return @this.ActionLink(linkText, actionName, controllerName, new { area = areaName }, null);
    

    注意最后一个参数值为'null',代表html属性。

    更新:

    另一个问题与连续可选参数有关,如 Phil Haack 的 blog post 中所述

    所以你需要做这样的解决方法;

     context.MapRoute(
                    "Route_withUrl",
                    "CPanel/{controller}/{action}/{id}/{urlData}",
                    new { controller = "Home", action = "Index" }
                );
    
                context.MapRoute(
                    "Cpanel_default",
                    "CPanel/{controller}/{action}/{id}",
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional}
                );
    

    【讨论】:

    • 嗨布罗迪。使用您提供的 ActionLink 重载实际上并没有解决问题。 仍在返回。
    • 是的,您似乎不能有两个连续的可选 url 参数 - 根据 Phil Haacks 博客 haacked.com/archive/2011/02/20/…
    • 标记答案,因为您找到了概述此问题的博客文章。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2011-07-03
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多