1. ホーム
  2. asp.net

[解決済み] asp.netのルーティングの問題

2022-02-09 04:25:04

質問内容

Global.asaxでの私のルートの実装

 protected void Application_Start(object sender, EventArgs e)
        {
            this.intRoutes(RouteTable.Routes);
        }

void intRoutes(RouteCollection Rts)
        {
            Rts.MapPageRoute("search", "{language}/{page}", "~/search.aspx");
            Rts.MapPageRoute("category", "{language}/{name}/{no}/{categoryname}", "~/category.aspx");
            Rts.MapPageRoute("product", "{language}/{name}/{no}/{productname}", "~/product.aspx");
        }

問題は、もし私が 製品 をハイパーリンクにルーティングしてください。

<asp:HyperLink ID="hyProduct" 
        NavigateUrl='<%#HttpUtility.UrlDecode(((Page)HttpContext.Current.Handler).GetRouteUrl("product", new{ language=getUIFromHelper(),name=getNameFromHelper(),no=Eval("code"),productname=getProductNameFromHelper(Eval("name"))})) %>' runat="server" Text="something" />

はすべてうまくいき、リンクは期待通りに次のように記述されます。

/en/products/06.008.001.150.0510/davis-fish-seeker-green

が、そのリンクをクリックすると カテゴリ.aspx のページが実行され、product.aspxは実行されません。

私は何かを見逃しているのでしょうか?

解決方法は?

はい、ルーターはどのようにあなたが欲しいものを見分けることができますか?どちらも4つのプレースホルダーがあり、固定ディレクトリはありません。どちらが意図されたものなのか、見分ける方法はありません。

固定ディレクトリを追加するなどして、区別がつくようにする必要があります。

Rts.MapPageRoute(..., "{language}/Category/{no}/{categoryname}", ...
Rts.MapPageRoute(..., "{language}/Product/{no}/{productname}", ...