[英]Asp.net Routing Url conversion?
可以说我有这个sql server表:
id Name Band
--------------------
1 John Beatles
2 Paul Beatles
3 George Beatles
4 Ringo Beatles
5 Jim Doors
我想要一个人的详细信息页面,例如:
http://localhost/Music/Beatles/Paul
我想对待的是:
http://localhost/Details.aspx?id=2
所以-我正在编写此代码来注册一条简单的路线:
void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapPageRoute("MyRoute", "Music/{Band}/{Name}", "~/Details.aspx");
}
但是我不明白:
当Asp.net得到http://localhost/Music/Beatles/Paul
,他怎么知道它知道保罗的值是2
?
您是在告诉我,每次asp.net遇到Paul
他都应该去数据库并扫描预定义的唯一列(在这种情况下为Name
)并获取其列ID
值?
还是我应该像这样将 Paul的值注入网址:
http://stackoverflow.com/questions/13938994/jquery-conditional-validation-based-on-select-text
^
|
---------------------------------------
在我的情况下:
http://localhost/Music/Beatles/2/Paul
Asp.net本质上不知道Paul的ID是2
。
您将不得不在自己的某个地方编写此逻辑。 您可以编写自己的RouteHandler
并自己进行路由(这将通过db调用来确定适当的ID)。
就个人而言,我只是让aspx页处理信息本身,而不假定它被赋予了实际的ID。
这是自定义路由处理程序的代码示例(摘自ASP.NET的Friendly URL )
public class CustomRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
string virtualPath = "~/path/to/page.aspx";
int id;
// this would obviously be some sort of database call
if (requestContext.RouteData.Values["Name"] == "Paul")
{
id = 2;
}
else
{
id = 8675309;
}
string newPath = string.Format(
"{0}?id={1}",
virtualPath,
id
);
HttpContext.Current.RewritePath(newPath);
return BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page)) as IHttpHandler;
}
}
并注册路线
RouteTable.Routes.Add("MyCustomRoute", new Route("Music/{Band}/{Name}", new CustomRouteHandler());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.