【问题标题】:Extends a RouteCollection object for Web Form routing为 Web 窗体路由扩展 RouteCollection 对象
【发布时间】:2011-08-08 13:36:48
【问题描述】:

我在 c# 中使用 asp.net 4 和 web 表单。

我想知道如何为 Web 表单 路由扩展 RouteCollection Class

由于 MSDN 状态 RouteCollectionExtensions 类仅适用于 MVC 路由。 所以我想知道 Web 表单中的等价物。

谢谢

【问题讨论】:

    标签: c# asp.net routing


    【解决方案1】:

    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);
            }
        }
    }
    

    【讨论】:

    • 谢谢克里斯,我明白你的意思,但我需要做一些不同的事情。看看goneale.com/2008/12/19/lowercase-route-urls-in-aspnet-mvc 我需要在 Asp.net Web 表单而不是 MVC 中实现,因为 RouteCollectionExtensions 类仅适用于 MVC 路由,我认为扩展 RouteCollection 让我知道你的想法,谢谢
    • 我认为您对类型名称感到困惑,您没有理由不能使用该示例。该示例中的RouteCollectionExtensions 类与System.Web.MVC.RouteCollectionExtensions 类不同,作者创建了自己的与MVC 同名的类,在我上面的示例中,您可以随意命名为MyRouteCollectionExtensions。我们对 WebForms 中的小写 Url 做了几乎相同的操作。
    • 好的,我明白你的意思了,最后一个问题,我将如何在方法 Page.GetRouteUrl 中使用你的代码?感谢您在这方面的时间:-)
    • Page.GetRouteUrl(new { name = "Bob" }); 会给你/SampleRoute/Bob - 但我的代码只是为了演示如何扩展RouteCollection,请关注博文。作为替代方案,您可以指定路由名称 (routes.Add("TestRoute", myRoute);),然后将其作为Page.GetRouteUrl("TestRoute", new { name = "Bob" }) 的第一个参数传递。我建议阅读 MSDN 页面,他们有一些很棒的文档来解释它是如何工作的。
    猜你喜欢
    • 2011-05-11
    • 2013-10-04
    • 1970-01-01
    • 2011-03-13
    • 2010-09-15
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多