ASP.NET MVC 3-难以理解Routes
本文关键字:Routes NET MVC ASP | 更新日期: 2023-09-27 18:20:22
我已经用NerdDinner教程在MVC 3中创建了一个系统。我不确定我是否完全理解路由。
一切都很好,直到我给我的分页助手添加了一个排序。
这是global.asax.cs
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"UpcomingKeyDates", // Route name
"KeyDates.mvc/{sortBy}/Page/{page}", // URL with parameters
new { controller = "Home", action = "Index" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}.mvc/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", sortBy = "EventDate" } // Parameter defaults
);
routes.MapRoute(
"Root", // Route name
"", // URL with parameters
new { controller = "Home", action = "Index", sortBy = "EventDate" } // Parameter defaults
);
}
当您第一次导航到页面时,我想默认列表按事件日期升序排序(这很好)。排序和分页也很好。但是,当我使用此链接时。。。
<%: Html.ActionLink("Create New", "Create", "Home") %>
链接只是指向同一页。我需要添加新路线还是修改现有路线?非常感谢您的帮助。
谢谢。
默认路由应始终显示在最后,并且是catch-all路由。它将自动捕获空路线,相当于http://yourdomain.com/
默认路由应始终具有以下格式
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "foo", action = "bar", id=UrlParameter.Optional }
);
此外,如果页面将是一个数字,则可以使用正则表达式对其进行约束(请参见下文)。
简而言之,更改您的Global.asax
,使其看起来像这样:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"UpcomingKeyDates", // Route name
"KeyDates.mvc/{sortBy}/Page/{page}", // URL with parameters
new { controller = "Home", action = "Index" }, // Parameter defaults
new { page = @"'d+" } // Note I have constrained the page so it has to be an integer...
);
routes.MapRoute(
"MyDefaultRoute", // Your special default which inserts .mvc into every route
"{controller}.mvc/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id=UrlParameter.Optional, sortBy = "EventDate" } // Parameter defaults
);
routes.MapRoute(
"Default", // Real default route. Matches any other route not already matched, including ""
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id=UrlParameter.Optional, sortBy = "EventDate" } // Parameter defaults
);
}