繁体   English   中英

asp.net路由的URL转换?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM