.net framework 3.5 sp1已经包含了asp.net routing引擎。现在微软已经在asp.net webforms 4.0中增加了对routing引擎更好的支持,它使用表达式构造器进行双向routing。
channel 9刚发布了一个10-4的新视频,展示如何在asp.net 4.0中使用这个新功能。
下面是视频中展示的一段代码。他们使用了一个经典示例,展示如何将product.aspx?category=jerseys映射至product/jerseys。在使用asp.net routing引擎时,我们可以在application_start中向routetable添加这样的映射:
routetable.routes.add("product",
new route("product/{name}",
new pageroutehandler("~/product.aspx")));
new route("product/{name}",
new pageroutehandler("~/product.aspx")));
目前为了得到双向的routing支持,用户必须对query string进行url重写。不过,使用asp.net 4.0时,用户可以注册如下的表达式构造器(expression builder):
<system.web>
<compilation>
<expressionbuilders ...>
<add expressionprefix="routeurl"
type="system.web.compilation.routeurlexpressionbuilder" />
<add expressionprefix="routevalue"
type="system.web.compilation.routevalueexpressionbuilder" />
expressionbuilders>
compilation>
system.web>
<compilation>
<expressionbuilders ...>
<add expressionprefix="routeurl"
type="system.web.compilation.routeurlexpressionbuilder" />
<add expressionprefix="routevalue"
type="system.web.compilation.routevalueexpressionbuilder" />
expressionbuilders>
compilation>
system.web>
第一个表达式用于生成url而第二个用于获取route值。在aspx页面中可以使用$符号来访问表达式:
<asp:hyperlink navigationurl="<%$ routeurl:routename=product, name=jerseys"
text="jerseys"
runat="server" />
text="jerseys"
runat="server" />
如果要获取name属性中的值,用户可以使用route对象而不是request对象:
routedata.values["name"];
或使用表达式构造器:
<%$ routevalue:name %>
用户可以利用asp.net routing引擎和新的双向支持将url和物理上的web form解耦,以便支持对搜索引擎更友好的url。
闽公网安备 35060202000074号