今天刚发现在Web Application 下也可以使用MVC中的Route功能,额,好吧,我out了。
以后可以像mvc中那样使用Route,可以不用Url Rewriting了.
1.添加Global.asax,添加并注册路由,具体代码如下:
记得加入System.Web.Routing引用。
01
protected void Application_Start(object sender, EventArgs e)
02
{
03
RegisterRoutes(RouteTable.Routes);
04
}
05
06
07
private void RegisterRoutes(RouteCollection routes)
08
{
09
routes.MapPageRoute("",
10
"SalesReportSummary/{year}",
11
"~/sales.aspx");
12
13
routes.MapPageRoute("SalesRoute",
14
"SalesReport/{locale}/{year}",
15
"~/sales.aspx");
16
17
routes.MapPageRoute("ExpensesRoute",
18
"ExpenseReport/{locale}/{year}/{*extrainfo}",
19
"~/expenses.aspx", true,
20
new RouteValueDictionary {
21
{"locale","US"},
22
{"year",DateTime.Now.Year.ToString()}},
23
new RouteValueDictionary {
24
{"locale","[a-z]{2}"},
25
{"year",@"\d{4}"}}
26
);
27
}
Route 的写法和MVC中基本相同。此处略去500字。
2.要想在页面中用Route代替物理文件路径有两种方法:
a.硬编码,即手动编写Route Url,但是如果之后你的Route 更改的话,你需要更改所有的硬编码URL。代码如下:
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/salesreportsummary/2010">
Sales Report - All locales, 2010
</asp:HyperLink>
b.让.net帮我们实现,并且没有上述方法的缺点。代码如下:
<asp:HyperLink ID="HyperLink5" runat="server" NavigateUrl="<%$RouteUrl:locale=CA,year=2009,routename=salesroute%>">
Sales Report - CA, 2009
</asp:HyperLink>
基于第二种方法,也可以在.cs/.vb中实现,如下:
HyperLink6是一个空的连接。
RouteValueDictionary parameters = new RouteValueDictionary{
{"locale","CA"},
{"year","2008"},
{"category","recreation"}
};
VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, "ExpensesRoute", parameters);
HyperLink6.NavigateUrl = vpd.VirtualPath;
3.既然使用Route Url,那就不可避免Url传值,可以使用如下方式:
<asp:Literal ID="Literal2" Text="<%$RouteValue:year%>" runat="server"></asp:Literal>
或者在cs文件中获取
LocaleLiteral.Text = Page.RouteData.Values["locale"] == null ? "All locales" : Page.RouteData.Values["locale"].ToString();
额,关于<%$RouteValue:year%> 有点疑问:这种写法必须放在控件(Literal或者HyperLink等)的属性中显示(如上),而不能单独显示,否则会提示Literal expressions like <%$RouteUrl:year=2011%> are not allowed. Use <asp:Literal runat="server" Text="<%$RouteUrl:year=2011%>" /> instead.
此处请高手指教。
2011/6/21 14:56:47 | asp.net | |