Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC 3路由中断ActionLink功能_Asp.net Mvc_Asp.net Mvc 2_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc ASP.NET MVC 3路由中断ActionLink功能

Asp.net mvc ASP.NET MVC 3路由中断ActionLink功能,asp.net-mvc,asp.net-mvc-2,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 2,Asp.net Mvc 3,我有一个迁移到MVC 3的MVC 2。迁移后,我的所有ActionLink都不再有效。我发现这是因为我的默认路线 routes.MapRoute( "Default", "{controller}/{action}/{id}/{title}", new { controller = "Home", action = "Index", id = UrlParameter.Optional, title = UrlParameter.Optional } ); 如果我将默认路由更改为MVCs默认路

我有一个迁移到MVC 3的MVC 2。迁移后,我的所有ActionLink都不再有效。我发现这是因为我的默认路线

routes.MapRoute( "Default", "{controller}/{action}/{id}/{title}", new { controller = "Home", action = "Index", id = UrlParameter.Optional, title = UrlParameter.Optional } );
如果我将默认路由更改为MVCs默认路由,它会再次正常工作

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

为什么title可选参数会破坏我的ActionLinks?

不是title可选参数有问题。在您的情况下,id参数是可选的。只有路由定义的最后一个参数可以是可选的,并且此规则已在ASP.NET MVC 3中强制执行。这里有一个关于这个话题的例子

因此,如果您希望拥有此类路由,请确保在生成这些链接时始终为id参数指定一个值:

@Html.ActionLink("text", "Index", new { id = "123" })

结果证明这是框架中的一个bug

抱歉,Phil Haack刚刚发布消息说这是一个bug。