【问题标题】:After a change to the default routing map my actionlinks stopped working更改默认路由映射后,我的操作链接停止工作
【发布时间】:2013-05-13 14:00:27
【问题描述】:

我对路由图进行了更改,现在如下:

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}/{title}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, title = UrlParameter.Optional }
            );

这是不再起作用的操作链接:

@Html.ActionLink("Category", "CategoryList", "Category")

当我单击此操作链接时,没有任何反应,网址在页面重新加载时保持不变 http://localhost:62394/。太奇怪了

当我检查 html 时,它看起来像这样:

<a href="">Category</a>

非常感谢任何帮助或提示!

注意:如果我从路由中删除标题,它会起作用...

【问题讨论】:

    标签: asp.net-mvc razor asp.net-mvc-routing actionlink


    【解决方案1】:

    这是因为您有 2 个可选参数,所以路由引擎不知道将第三个参数映射到哪一个。感觉标题将用于特定路线而不是通用路线。如果是这样,为什么不为其创建一个特定的路由并将其从通用后备路由中删除?

    类似这样的:

    routes.MapRoute(
                name: "Title",
                url: "Category-List/{title}",
                defaults: new { controller = "Category", action = "CategoryList", title = UrlParameter.Optional }
            );
    routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
    

    【讨论】:

    • 我明白了,但它是如何工作的?我需要选择一个并在某处说出来吗?
    • 路由自上而下工作。引擎遍历列表,直到找到第一个匹配项。如果您使用Category 控制器和CategoryList 操作创建操作链接,它将匹配第一个路由,无论您是否还包含标题。所有其他控制器和操作路由都将匹配第二条规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2013-07-12
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多