2016-10-17 36 views
1

我有以下链接MVC4索引页:MVC4 ActionLink的不带参数指向当前路径

@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路径(即如果我们在域/ 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) 
{ 
    ... 
} 

什么可以造成这种奇怪的行为?

编辑:

如果我通过一年的参数,做工精细:@Html.ActionLink("FOO", "Index", "Mil", new { year = 666, id = String.Empty }, null)正确地指向域/英里/ 666

+0

可能不是问题,但只有最后一个参数可以被标记为'UrlParameter.Optional' –

+0

我编辑我的问题。这不是解决方案,但肯定是相关的。按照您的建议,我将路线中的年份= UrlParameter.Optional改为'year =“”',但问题仍然存在。 –

+0

要么使用'null'即:'@ Html.ActionLink( “FOO”, “索引”, “军用”,新的一年{= NULL,ID = NULL},NULL)'还是将它们全部删除在一起,即:'@ Html.ActionLink( “富”, “索引”, “军用”,NULL,NULL)' – Nkosi

回答

1

我能够使其通过一个默认后添加此路线工作。

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)