Sim*_*ver 6 asp.net-mvc asp.net-routing asp.net-4.0 asp.net-mvc-2
我今天将我的项目升级到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}
);
Run Code Online (Sandbox Code Playgroud)
在.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
Run Code Online (Sandbox Code Playgroud)
在.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
Run Code Online (Sandbox Code Playgroud)
以前我只能提供galleryID,生成的URL中会忽略其他所有内容.但现在看起来我需要指定所有参数,直到title- 或者它在确定URL时放弃了.
传入的URL工作正常,/gallery/cats并通过此规则正确映射,imageID并在控制器title中分配null.
我还用http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx测试了INCOMING路线,它们都运行良好.
在ASP.NET MVC 2.0中指定可选参数的正确方法是使用UrlParameter.Optional字段:
routes.MapRoute(
"gallery-route",
"gallery/{galleryID}/{imageID}/{title}",
new
{
controller = "Gallery",
action = "Index",
galleryID = UrlParameter.Optional,
imageID = UrlParameter.Optional,
title = UrlParameter.Optional
}
);
Run Code Online (Sandbox Code Playgroud)
假设以下控制器和操作:
public class GalleryController : Controller
{
public ActionResult Index(string galleryID, string imageID, string title)
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些都将按预期工作:
<%= 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" })%>
Run Code Online (Sandbox Code Playgroud)
呈现为:
/gallery/cats
/gallery/cats/4
/gallery/cats/4/tiddles
Run Code Online (Sandbox Code Playgroud)
备注:在Windows 7 x64,Visual Studio 2010 RTM,ASP.NET MVC 2.0项目上测试.
| 归档时间: |
|
| 查看次数: |
1193 次 |
| 最近记录: |