WebForm开发中的路由功能
来源:互联网 发布:国际数据统计公司 编辑:程序博客网 时间:2024/05/22 01:59
前言
在System.Web.Routing命名空间中存在着这么一个对象,能够实现传统webform开发下的路由功能:RouteTable,实际上ASP.NET MVC框架也是依赖于此的。本篇就讲讲在传统webform开发中如何实现url rewrite功能(以前要实现这功能,那是相当的…)
入题
下面以新闻查看为sample,比如,原先传统webform开发,大多是如下的url方式:http://xxxx/newsdetail.aspx?newsId=100,如今,通过路由功能,能很方便的实现转换成SEO友好的方式,如:http://xxxx/news/新闻标题, 对于搜索引擎和人类来说可是相当友好了。简单的代码分成如下两步:
进入Global中定义路由
void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapPageRoute("r1", "news/{uid}", "~/NewsDetail.aspx"); }
在NewsDetail.aspx文件中使用新的路由参数
<head runat="server"> <title><%=NewsTitle%> - Aaron</title></head><body> <form id="form1" runat="server"> <div> <strong><%=NewsTitle%></strong> </div> </form></body>
public partial class NewsDetail : System.Web.UI.Page { public string NewsTitle { get; set; } protected void Page_Load(object sender, EventArgs e) { this.NewsTitle = string.Format("新闻标题 {0}", this.RouteData.Values["uid"]); } }
运行效果如下图:
现在直接访问具体的新闻是可以了,但是如果用户只输入http://localhost:3742/news呢?就报错啦(因为这个url格式不符合路由,因此报404错误):
有2个办法,要么增加一条路由记录,要么为目前这条路由设置默认值,我们来看设置默认值得方式吧:
var defaults = new RouteValueDictionary { { "uid", "默认新闻" } }; RouteTable.Routes.MapPageRoute("r1", "news/{uid}", "~/NewsDetail.aspx", false, defaults);
此时通过这么一Compile,再访问http://localhost:3742/news, 就不会报错了,如下图:
上面说到的路由,除了url外,还有个参数uid,对于NewsDetail.aspx中的代码来说,也就这么一个uid参数,但是,假如我想加入一些固定的参数配置呢?比如:打算做一次email营销,要统计因为email营销而得到的访问量,我们就这样做吧(下面这个做法不专业,只是讲解路由参数的用法):
修改Global代码,给email营销渠道增加相应的路由设置、为新渠道设置固定参数source为"渠道A":
void Application_Start(object sender, EventArgs e) { var defaults = new RouteValueDictionary { { "uid", "默认新闻" } }; RouteTable.Routes.MapPageRoute("r1", "news/{uid}", "~/NewsDetail.aspx", false, defaults); var dataTokens = new RouteValueDictionary { { "source", "渠道A" } }; RouteTable.Routes.MapPageRoute("r2", "newsTuiGuang001/{uid}", "~/NewsDetail.aspx", false, defaults, null, dataTokens); }
修改NewsDetail.aspx.cs,让代码能够处理这个新增的source参数:
public partial class NewsDetail : System.Web.UI.Page { public string NewsTitle { get; set; } protected void Page_Load(object sender, EventArgs e) { this.NewsTitle = string.Format("新闻标题 {0}", this.RouteData.Values["uid"]); if (this.RouteData.DataTokens["source"] != null) { this.NewsTitle += "------来源:推广渠道" + this.RouteData.DataTokens["source"]; } } }
编译,运行:
搞定,哈哈,从代码中得知,固定参数的传递是通过RouteData.DataTokens数组来传递的。
大家要是对路由映射有兴趣,就看看蒋金楠(Artech)的博客吧:http://www.cnblogs.com/artech/archive/2012/03/20/aspnet-routing-02.html
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- WebForm开发中的路由功能
- Webform下开发rdlc报表实现钻取功能!
- .net webform的url路由
- WebForm 打印功能代码
- WebForm中的tip
- Web开发中的"路由"是什么意思?(关键词:Web开发/路由)
- webform 控件开发
- webform中也可以直接url路由
- 在Webform中使用URL路由
- MVC与Webform混合开发
- 【原创】Linux实现路由转发功能开发总结
- AngularJS中的基础路由,通过ng-route实现基本的路由功能
- 关于angular2路由中的单页面开发问题
- 认识 ASP.NET 3.5 MVC 路由 在WebForm项目中使用路由
- EA700a路由功能设置
- 开启xp路由功能
- 模拟路由功能
- linux系统路由功能
- Android中的单元测试
- 随谈天朝,明末,英雄志,满清和中国文化,或许是坑
- Android中图片的展示之Webview居中显示图片
- 菜菜从零学习WCF三(配置服务)
- Java Vector方法 add()与addElement()
- WebForm开发中的路由功能
- Entity Framework技术系列之7:LINQ to Entities
- 归纳整理--第3篇--代码仓库
- S-expression
- java调用数据库示例
- IOS之同步请求、异步请求、GET请求、POST请求
- C#反射的特性
- Thinking in java第四版--第2章习题答案--关键字、变量、声明、赋值、初始化、类型转换
- Visual Studio 及 .NET Framework 及 C#语言规范 的 版本对应 及C#新增功能