我将我的项目升级到 ASP.NET 4 RTM
与 ASP.NET MVC 2.0 RTM
今天。
我以前用过 ASP.NET 3.5
与 ASP.NET MVC 2.0 RTM
.
我的一些路线突然不起作用,我不知道为什么。我不确定 3.5 和 4.0 之间是否发生了变化 - 或者这是否是 4.0 RTM 中的回归类型问题。 (我以前从未用 4.0 测试过我的应用程序)。
我喜欢用 Url.RouteUrl("route-name", routeParams)
避免在生成 URL 时产生歧义。这是我对画廊页面的路线定义。我要 imageID
是可选的(如果你没有指定它,你会得到一个缩略图页面)。
// gallery id
routes.MapRoute(
"gallery-route",
"gallery/{galleryID}/{imageID}/{title}",
new { controller = "Gallery", action = "Index",
galleryID = (string) null,
imageID = (string) null,
title = (string) null}
);
在 .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
在 .NET 4.0 RTM/ASP.NET 2.0 RTM/IIS7
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。传入 URL 适用于
/gallery/cats
并且通过此规则正确映射 imageID
和 title
两者都被分配 null
在我的 Controller 中。我还使用 http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx 测试了 INCOMING 路由他们都工作正常。
最佳答案
在 ASP.NET MVC 2.0 中指定可选参数的正确方法是使用 UrlParameter.Optional field :
routes.MapRoute(
"gallery-route",
"gallery/{galleryID}/{imageID}/{title}",
new
{
controller = "Gallery",
action = "Index",
galleryID = UrlParameter.Optional,
imageID = UrlParameter.Optional,
title = UrlParameter.Optional
}
);
假设以下 Controller 和操作:
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" })%>
呈现为:
/gallery/cats
/gallery/cats/4
/gallery/cats/4/tiddles
备注:在 Windows 7 x64、Visual Studio 2010 RTM、ASP.NET MVC 2.0 项目上测试。
关于asp.net-mvc - ASP.NET 4 RTM 中的可选路由参数不再像以前一样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2626791/