在webform中使用在MVC中惯用的Route还是比较简单的,对于不同的版本,方法不同,首先介绍一下Asp.net 4.0中的使用方法:
1)在全局文件中添加:
public static void RegisterRoutes(RouteCollection routes)
{
//routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapPageRoute(
"myNewRoute",
"home",
"~/Default.aspx"
);
routes.MapPageRoute(
"myNewRoute2",
"home/{item}",
"~/About.aspx"
);
}
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
RegisterRoutes(RouteTable.Routes);
}
这个和在mvc中类似,就是添加一个路由规则到RouteCollege里面(路由规则我是乱写的,能说明问题即可)
2)OK,其实已经可以使用了,不信,你访问一下/home、/home/2。你会发现第一个访问的是"~/Default.aspx",第二个访问的是"~/About.aspx",可是这里还有问题,这url里面的{item}部分如何获取呢,用request这种方法是没法得到的,继续往下看。
3)其实获取参数的方式很简单,可以这样:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Page.RouteData.Values["item"].ToString());
}
如果你访问的是/home/2,你将看见Response.Write出了一个“2”。我想您该明白了吧?
还有一些其他的获取办法:
<1>在控件中获取:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="CreateT_User" TypeName="WebApplication1.T_User">
很优雅很眼熟吧。
<2>还有一种:
4)那么,如果您想问如何获取Route构造出的url呢,如下:
string url=Page.GetRouteUrl("myNewRoute3",new{item=2});
还可以直接将构造的url加到控件中,比如:
<asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl="<%$routeurl:routename=mynewroute2,item=2>">构造的url链接
很简单很直白吧,不过在asp.net 3中使用就没那么简单了
------------------------------------------------------------------------------------------------------------------------------------------------------------
如何在asp.net 3.5中使用Route呢,一个提示,实现IRouteHandler接口
下面转自http://blog.csdn.net/dupeng0811/article/details/4663704
ASP.NET 路由使您可以处理未映射到 Web 应用程序中物理文件的 URL 请求。默认情况下,在动态数据或 MVC 框架的一个 ASP.NET 应用程序中启用 ASP.NET 路由,而不在 ASP.NET 网站项目中启用路由。
因此,若要在 ASP.NET 网站中使用路由,必须采取措施来启用。
要实现在WebForm中使用路由,首先需要创建实现IRouteHandler接口的WebFormRouteHandler类,然后在全局应用程序类中配置路由的映射就可以了。
WebFormRouteHandler代码如下:
public class WebFormRouteHanlder : IRouteHandler
{
public string VirtualPath
{
get; private set;
}
public WebFormRouteHanlder(string virtualPah)
{
VirtualPath = virtualPah;
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler;
return page;
}
}
在Global.asax中配置路由
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.Add("Named", new Route("foo/bar", new WebFormRouteHanlder("~/Default.aspx")));
routes.Add("Number", new Route("one/two/three", new WebFormRouteHanlder("~/forms/haha.aspx")));
}
还需要在Web.config中配置System.Web.Routing的引用!
运行,访问http://localhost:5598/foo/bar 。OK~~~~
参考:MSDN,MVC架构与实战 地址:如何:MSDN帮助 对 Web 窗体使用路由