我的区域注册为:
public override void RegisterArea(AreaRegistrationContext context) {
context.MapRoute("CPanel_default",
"CPanel/{controller}/{action}/{id}/{*urlData}",
new { id = UrlParameter.Optional, urlData = UrlParameter.Optional });
}
此路线旨在填写许多网址:
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。
答案 0 :(得分:2)
问题是您无法将控制器名称作为路由参数传递。
您需要使用以下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}
);