【问题标题】:MVC ActionLink omits action when action equals default route value当动作等于默认路由值时,MVC ActionLink 省略动作
【发布时间】:2011-06-02 01:42:10
【问题描述】:

我为我的应用程序定义了以下路由:

routes.MapRoute(
    "Referral", // Route name
    "{referralCode}", // URL with parameters
    new { controller = "Home", action = "Index" } // Parameter defaults
);

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}", // URL with parameters
    new { controller = "Home", action = "Index" } // Parameter defaults
);

我正在尝试创建一个 ActionLink 以在我的 AdminController 上执行 Index 操作:

@Html.ActionLink("admin", "Index", "Admin")

然而,当视图被执行时,ActionLink 呈现为(索引动作值被省略):

<a href="/Admin">admin</a>

通常这没问题,但它会导致与“推荐”路线发生冲突。

注意:如果我改为使用 ActionLink 呈现不同的动作,例如“默认”,ActionLink 会正确呈现:

<a href="/Admin/Default">admin</a>

“默认”操作正确呈现的事实使我相信问题与为路由指定的默认值有关。是否有强制 ActionLink 也呈现“索引”动作?

【问题讨论】:

    标签: asp.net-mvc actionlink


    【解决方案1】:

    删除默认路由上的默认 action 参数:

    routes.MapRoute(
        "Default", 
        "{controller}/{action}", 
        new { controller = "Home"} //  action omitted
    );
    

    这将强制始终在 url 中指定操作。

    【讨论】:

    • 谢谢。我最终从“默认”路由的路由默认值中删除了动作和控制器,并为“推荐”路由指定了referralCode = UrlParameter.Optional。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多