2011-01-02 37 views
0

Global.asaxの上で私のルートの実装asp.netルーティング問題

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 

のように予想されるように、リンクが書かれているが、私はそのリンクをクリックしたときにcategory.aspxページの実行がproduct.aspxのinsted。

私は何かを逃していますか?

答えて

1

はい、どのようにルータを使用すると、対象となる1わかりますか?彼らは両方とも固定ディレクトリのない4つのプレースホルダを持っています。どちらが意図されているかを知る方法はありません。

あなたはそれが2を区別することができますように、固定ディレクトリを追加するような何かをする必要があります

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

はいジョナサン、私は両方のルートが同じ構造を持っている、ということに気づきました。 私はあなたの迅速な応答のためにそれらの1つの... 感謝を変更する必要があります –

0

私は追加の仮想フォルダカテゴリと製品の両方を追加しましたあるルート/ C//P/

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

、今、ルータが欲しかっされた1を区別することができます。..