我是ASP.NET MVC3的新手。
我在Global.asax中配置了一些路由,我使用@ Html.ActionLink帮助方法生成一些超链接。
除了以下代码中的顶部链接外,所有链接都已正确呈现:
Global.asax中
routes.MapRoute(
null,
"Section/{Page}/{SubPage}/{DetailPageName}",
new { controller = "Base" }
);
routes.MapRoute(
null,
"Section/{Page}/{SubPage}",
new { controller = "Base", action = "SubPage" }
);
routes.MapRoute(
null,
"Section/{Page}",
new { controller ="Base", action="LandingPage"}
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}", // URL with parameters
new { controller = "Base", action = "Index" } // Parameter defaults
);
ActionLink代码
@Html.ActionLink(@subPages.LinkedPageName, "DetailPage",
new {
Controller = "Base",
Page = @ViewBag.PageName,
SubPage = @Model.SubPageName,
DetailPageName = subPages.LinkedPageName
})
以上应选择最佳路线,即:
routes.MapRoute(
null,
"Section/{Page}/{SubPage}/{DetailPageName}",
new { controller = "Base" }
);
但它正在选择默认路线!
答案 0 :(得分:2)
在此路线定义中:
routes.MapRoute(
null,
"Section/{Page}/{SubPage}/{DetailPageName}",
new { controller = "Base" }
);
为了匹配路线,必须满足以下条件:
controller
参数传递到ActionLink
,则其值必须为Base
Page
参数,且必须为非空,因为它没有默认值SubPage
参数,且必须为非空,因为它没有默认值DetailPageName
参数,且必须为非空,因为它没有默认值所以在这次ActionLink
的调用中:
@Html.ActionLink(@subPages.LinkedPageName, "DetailPage",
new {
Controller = "Base",
Page = @ViewBag.PageName,
SubPage = @Model.SubPageName,
DetailPageName = subPages.LinkedPageName
})
条件#1显然是令人满意的。但条件#2,#3和#4可能不满足,因为它们的值可能为空。
并且因为您声明最终匹配的路由是默认路由,我怀疑Page
参数为null或为空。也就是说,@ViewBag.PageName
返回null或空值。
签入您的代码(可能在调试器中或在视图中打印出来)以查看PageName
属性是否有值。