Dee*_*hak 6 asp.net-mvc-routing
我是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
);
Run Code Online (Sandbox Code Playgroud)
ActionLink代码
@Html.ActionLink(@subPages.LinkedPageName, "DetailPage",
new {
Controller = "Base",
Page = @ViewBag.PageName,
SubPage = @Model.SubPageName,
DetailPageName = subPages.LinkedPageName
})
Run Code Online (Sandbox Code Playgroud)
以上应选择最佳路线,即:
routes.MapRoute(
null,
"Section/{Page}/{SubPage}/{DetailPageName}",
new { controller = "Base" }
);
Run Code Online (Sandbox Code Playgroud)
但它正在选择默认路线!
在此路由定义中:
routes.MapRoute(
null,
"Section/{Page}/{SubPage}/{DetailPageName}",
new { controller = "Base" }
);
Run Code Online (Sandbox Code Playgroud)
必须满足以下条件才能匹配路由:
controller参数传入,ActionLink那么它的值必须是BasePage参数必须指定且必须非空,因为它没有默认值SubPage参数必须指定且必须非空,因为它没有默认值DetailPageName参数必须指定且必须非空,因为它没有默认值所以在这次通话中ActionLink:
@Html.ActionLink(@subPages.LinkedPageName, "DetailPage",
new {
Controller = "Base",
Page = @ViewBag.PageName,
SubPage = @Model.SubPageName,
DetailPageName = subPages.LinkedPageName
})
Run Code Online (Sandbox Code Playgroud)
条件#1 显然已得到满足。但条件#2、#3 和#4 可能无法满足,因为它们的值可能为空。
并且因为您声明最终匹配的路由是默认路由,所以我怀疑该Page参数为 null 或为空。也就是说,@ViewBag.PageName返回 null 或空值。
检查您的代码(可能在调试器中或在视图中打印出来)以查看该PageName属性是否具有值。
| 归档时间: |
|
| 查看次数: |
573 次 |
| 最近记录: |