0

私がこのSQLサーバーテーブルを持っているとしましょう:

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が取得したとき、Paulの値がであることがわかっていることhttp://localhost/Music/Beatles/Paulどうやって知るの2でしょうか。

asp.netに遭遇するたびPaulに、DBにアクセスして、事前定義された一意の列(Nameこの場合)をスキャンし、その列のID値を取得する必要があると言っていますか?

または、SOのようにPaulの値をURLに挿入する必要があります:

 http://stackoverflow.com/questions/13938994/jquery-conditional-validation-based-on-select-text 
                                       ^
                                       |
---------------------------------------

私の場合はこれになります:

http://localhost/Music/Beatles/2/Paul

4

1 に答える 1

1

Asp.net は、Paul の ID が であることを本質的に認識していません2

このロジックを自分のどこかに書く必要があります。独自のものを作成し、自分でルーティングを行うことができRouteHandlerます (適切な ID を決定するために db 呼び出しを行います)。

個人的には、aspx ページに情報自体を処理させ、実際の ID が与えられているとは想定しません。

カスタム ルート ハンドラーのコード サンプルを次に示します ( ASP.NET のフレンドリー 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());
于 2012-12-18T19:42:13.637 に答える