Asp.net mvc ASP.NET 4 RTM中的可选路由参数不再像以前那样工作
今天我用Asp.net mvc ASP.NET 4 RTM中的可选路由参数不再像以前那样工作,asp.net-mvc,asp.net-mvc-2,asp.net-4.0,asp.net-routing,Asp.net Mvc,Asp.net Mvc 2,Asp.net 4.0,Asp.net Routing,今天我用ASP.netmvc2.0rtm将我的项目升级到ASP.net4rtm 我以前使用的是ASP.net3.5和ASP.netmvc2.0rtm 我的一些路线突然不起作用,我不知道为什么。我不确定3.5和4.0之间是否发生了变化,或者这是否是4.0 RTM中的回归类型问题。(我以前从未用4.0测试过我的应用程序) 我喜欢使用Url.RouteUrl(“路由名称”,routeParams)来避免在生成Url时产生歧义。这是我的画廊页面的路线定义。我希望imageID是可选的(如果不指定,则会得
ASP.netmvc2.0rtm
将我的项目升级到ASP.net4rtm
我以前使用的是ASP.net3.5
和ASP.netmvc2.0rtm
我的一些路线突然不起作用,我不知道为什么。我不确定3.5和4.0之间是否发生了变化,或者这是否是4.0 RTM中的回归类型问题。(我以前从未用4.0测试过我的应用程序)
我喜欢使用Url.RouteUrl(“路由名称”,routeParams)
来避免在生成Url时产生歧义。这是我的画廊页面的路线定义。我希望imageID
是可选的(如果不指定,则会得到一个缩略图)
在.NET 3.5/ASP.NET 2.0 RTM/IIS7中
Url.RouteUrl("gallery-route", new { galleryID = "cats"})
=> /gallery/cats
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")
=> /gallery/cats/4
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles")
=> /gallery/cats/4/tiddles
Url.RouteUrl("gallery-route", new { galleryID = "cats"})
=> null
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")
=> /gallery/cats/4
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles")
=> /gallery/cats/4/tiddles
在.NET 4.0 RTM/ASP.NET 2.0 RTM/IIS7中
Url.RouteUrl("gallery-route", new { galleryID = "cats"})
=> /gallery/cats
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")
=> /gallery/cats/4
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles")
=> /gallery/cats/4/tiddles
Url.RouteUrl("gallery-route", new { galleryID = "cats"})
=> null
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4")
=> /gallery/cats/4
Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles")
=> /gallery/cats/4/tiddles
以前,我只能提供galleryID,在生成的URL中,其他所有内容都将被忽略。但是现在看起来我需要指定所有的参数,直到title
——或者它放弃了确定URL
对于/gallery/cats
而言,传入URL工作正常,并且通过此规则正确映射,imageID
和title
都在我的控制器中分配null
我还使用测试了传入路由,它们都工作正常。在ASP.NET MVC 2.0中指定可选参数的正确方法是使用以下字段: 假设以下控制器和操作:
public class GalleryController : Controller
{
public ActionResult Index(string galleryID, string imageID, string title)
{
return View();
}
}
所有这些都将按预期工作:
<%= Url.RouteUrl("gallery-route", new { galleryID = "cats" }) %><br/>
<%= Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4"}) %><br/>
<%= Url.RouteUrl("gallery-route", new { galleryID = "cats", imageID = "4", title = "tiddles" })%>
备注:在Windows 7 x64、Visual Studio 2010 RTM、ASP.NET MVC 2.0项目上测试。我知道问题是针对MVC2的,但在MVC3中,Darin Dimitrov给出的答案将失败 Phil Haack在他的博客中解释了这个问题并给出了解决方案:
如果有人能在.NET 4 RC中测试这一点,我将不胜感激。我只有一台机器:-(这是一个3.5或4.0框架项目吗?确实有些变化,因为我没有更改mvc版本。我实际上认为我以前使用optional进行过测试,但实际上它使用了render UrlParameter。输出URL是可选的。感谢您对其进行测试。我将再尝试一次。这是我使用V创建的一个4.0框架项目iVisual Studio模板。
/gallery/cats
/gallery/cats/4
/gallery/cats/4/tiddles