gpt4 book ai didi

asp.net-mvc-routing - 不正确的路由被拾取并且 ActionLink 生成错误的超链接

转载 作者:行者123 更新时间:2023-12-04 15:46:58 26 4
gpt4 key购买 nike

我是 ASP.NET MVC3 的新手。

我在 Global.asax 中配置了一些路由,我正在使用 @Html.ActionLink helper 方法生成一些超链接。

除了下面代码中的顶部链接之外,所有链接都得到了正确呈现:

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
);

操作链接代码
@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" }
);

但它正在选择默认路由!

最佳答案

在此路由定义中:

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参数为空或空。也就是说, @ViewBag.PageName正在返回 null 或空值。

    检查您的代码(可能在调试器中或在 View 中打印出来)以查看 PageName属性(property)是有值(value)的。

    关于asp.net-mvc-routing - 不正确的路由被拾取并且 ActionLink 生成错误的超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10633802/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com