ASP.NET WebForm URL rewrite in VS2010

在C#2.0时期,要把 /Farm.aspx?farmid=1映射成/farm/1,需要借助IISRewriter或者其它第三方组件,也可以自己用代码定义路由规则,要修改web.config,甚至要写正则表达式去匹配规则,总之是一件比较麻烦的事情。有了VS2010,asp.net4.0中asp.net mvc中的路由规则全部可以用于webform了,这个功能实现起来也变得非常容易。

在VS2010平台下,URL重写变得容易很多。

首先在Globle文件中自定义路由规则,如下:

        void Application_Start(object sender, EventArgs e)
        {
            // Code that runs on application startup
            RegisterRoutes(RouteTable.Routes);
        }

        /// <summary>
        /// 自定义路由规则
        /// </summary>
        /// <param name="routes"></param>
        /// 参数含义:
        /// 第一个参数:路由名称
        /// 第二个参数:路由规则
        /// 第三个参数:该路由规则交给哪一个页面来处理       
        void RegisterRoutes(RouteCollection routes)
        {
            routes.MapPageRoute("farm-browse", "farms/{farmid}", "~/Farm.aspx");
        }

然后在指定的处理页面中接收参数,即在Farm.aspx中处理,如下:

        protected int FarmId
        {
            get
            {
                int id;

                int.TryParse(Page.RouteData.Values["farmid"].ToString(), out id);

                return id;
            }
        }

以上两步就完成URL重定向的功能。

ASPX页面中,直接使用路由规则即可,如下:

<ul>
    <% using (ASPNETDBEntities db = new ASPNETDBEntities())
       {
           var farms = db.Farms.OrderByDescending(f => f.DateCreated).Take(10);
           if (farms != null && farms.Count() > 0)
           {
               foreach (var farm in farms)
               {
    %>
    <li><a href="../farms/<%= farm.FarmId %>">
        <%= farm.FarmTitle %></a><br />
        <%= farm.DateCreated.ToString("yyyy-MM-dd") %></li>
    <%}
           }
       } %>
</ul>

你可能感兴趣的:(正则表达式,application,url,webform,asp.net,2010)