【问题标题】:MVC4 ActionLink without parameters points to current path不带参数的 MVC4 ActionLink 指向当前路径
【发布时间】:2016-10-17 12:37:08
【问题描述】:

我有一个包含以下链接的 MVC4 索引页面:

@Html.ActionLink("FOO", "Index", "Mil", new { year = String.Empty, id = String.Empty }, null)
@Html.ActionLink("BAR", "Index", "Euro", new { year = String.Empty, id = String.Empty }, null)

但奇怪的是,两者都变成了指向 CURRENT 路径的超链接(即,如果我们在 domain/Euro/2016/1 处,两者都链接到该地址),而不是指向指定的控制器。

RouteConfig 一切正常:

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

控制器/动作存在并且工作正常:

EuroController

public ActionResult Index(int? year, int? id)
 {
    ...
 }

是什么导致了这种奇怪的行为?

编辑:

如果我通过 year 参数,工作正常:@Html.ActionLink("FOO", "Index", "Mil", new { year = 666, id = String.Empty }, null) 正确指向 domain/Mil/666

【问题讨论】:

  • 可能不是问题,但只有最后一个参数可以标记为UrlParameter.Optional
  • 我编辑了我的问题。这不是解决方案,但肯定是相关的。我按照您的建议将 Routes 中的 year=UrlParameter.Optional 更改为 year="",但问题仍然存在。
  • 要么使用null 即:@Html.ActionLink("FOO", "Index", "Mil", new { year = null, id = null }, null),要么一起删除它们,即:@Html.ActionLink("FOO", "Index", "Mil", null, null)
  • @Nkrosi 您建议的两个链接都不起作用。

标签: asp.net-mvc-4 iis actionlink html.actionlink


【解决方案1】:

我可以通过在默认路由之后添加这个 New 路由来使其工作。

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

以下所有链接都会产生预期的效果:

@Html.ActionLink("Euro 2014", "Index", "Euro", new { year = 2014 }, null)
@Html.ActionLink("Euro 2015", "Index", "Euro", new { year = 2015, id = String.Empty }, null)
@Html.ActionLink("Euro 2016", "Index", "Euro", new { year = DateTime.Now.Year, id = "" }, null)
@Html.ActionLink("Back to Euro", "Index", "Euro", new { year = String.Empty }, null)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 2023-01-11
    相关资源
    最近更新 更多