【发布时间】:2011-08-08 13:36:48
【问题描述】:
我在 c# 中使用 asp.net 4 和 web 表单。
我想知道如何为 Web 表单 路由扩展 RouteCollection Class。
由于 MSDN 状态 RouteCollectionExtensions 类仅适用于 MVC 路由。 所以我想知道 Web 表单中的等价物。
谢谢
【问题讨论】:
我在 c# 中使用 asp.net 4 和 web 表单。
我想知道如何为 Web 表单 路由扩展 RouteCollection Class。
由于 MSDN 状态 RouteCollectionExtensions 类仅适用于 MVC 路由。 所以我想知道 Web 表单中的等价物。
谢谢
【问题讨论】:
ASP.NET 路由可用于 .NET 4 和 3.5 中的 Web 表单,我认为。
在 MSDN 上有指导。 http://msdn.microsoft.com/en-us/library/cc668201.aspx
webforms 示例要求您在global.asax 中添加以下内容
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("",
"Category/{action}/{categoryName}",
"~/categoriespage.aspx");
}
RouteCollectionExtensions类型为MVC框架提供了扩展RouteCollection的扩展方法,你可以创建自己的extension methods来扩展RouteCollection。
下面的简单示例,我相信您会想将MyRouteCollectionExtensions 放在其他地方。
using System;
using System.Web.Routing;
namespace WebFormsExtension
{
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapCustomRoute("SampleRoute/{name}");
}
}
public static class MyRouteCollectionExtensions
{
public static void MapCustomRoute(this RouteCollection routes, string url)
{
PageRouteHandler handler = new PageRouteHandler("~/default.aspx");
Route myRoute = new Route(url, handler);
routes.Add(myRoute);
}
}
}
【讨论】:
RouteCollectionExtensions 类与System.Web.MVC.RouteCollectionExtensions 类不同,作者创建了自己的与MVC 同名的类,在我上面的示例中,您可以随意命名为MyRouteCollectionExtensions。我们对 WebForms 中的小写 Url 做了几乎相同的操作。
Page.GetRouteUrl(new { name = "Bob" }); 会给你/SampleRoute/Bob - 但我的代码只是为了演示如何扩展RouteCollection,请关注博文。作为替代方案,您可以指定路由名称 (routes.Add("TestRoute", myRoute);),然后将其作为Page.GetRouteUrl("TestRoute", new { name = "Bob" }) 的第一个参数传递。我建议阅读 MSDN 页面,他们有一些很棒的文档来解释它是如何工作的。