0

asp 4.0 のルーティングに問題があります。

Global.cs にメソッドがあります

void RegisterRoutes(RouteCollection routes)
{  
    routes.MapPageRoute("cats","Categories/{ct}/{catname}","~/catwise.aspx");  
} 

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

そして私のマスターページで

<a href="Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>"> 

これは最初のルーティングでは完全に機能しCategories/1/Appleていますが、最初のルーティング後、すべてのリンクがルーティングされたページから二重になっていますCategories/1/Apple/Categories/2/Banana

リンクが相互に上昇しているため、Resource not found 設定を試みBaseたことがページに表示されますが、問題が悪化しました。カスタム ハンドラは使用していません

この問題を解決するにはどうすればよいですか?/なぜ正しく動作しないのですか?

/前に url like を使用しようとしましたが、追加され た<a href="/Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>"> と言われました が、コンパイル時エラーが発生し、url にorを含めることはできません。resource not found/routes.MapPageRoute("cats","/Categories/{ct}/{catname}","~/catwise.aspx");
/~?

4

3 に答える 3

0

これはルーティングの問題ではありません。問題はリンクにあります。が Web ページでリンクを生成するためのより良い方法かどうかはわかりませんが、簡単な修正は単純に を追加すること/です:

<a href="/Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>">

編集:

ホームページにいるときhttp://mysite/にブラウザに「相対」リンクが表示Categories/1/Appleされると、それが現在のパスに追加されるため、結果はhttp://mysite/Categories/1/Apple. リンクはページに関連しているため、次にリンクにアクセスすると、ブラウザはそれを再度追加し、http://mysite/Categories/1/Apple/Categories/1/Apple. 私が提案した簡単な修正は、先頭に を追加して相対リンクを絶対リンクに変更すること/です。

問題全体は、asp.net とそのルーティングとは何の関係もありません。ブラウザが相対リンクをどのように扱うかについてです。次のように、(ルーティングを使用する場合) リンクを生成するより適切な方法があると思います。

<asp:HyperLink ID="HyperLink1" runat="server" 
    NavigateUrl="<%$RouteUrl:ct=1,catname=Apples,routename=cats%>">
    Link Text
</asp:HyperLink>

データ バインディングのシナリオでは、次のことを試すことができます。

<asp:HyperLink ID="HyperLinkClient" runat="server"  
    NavigateUrl='<%# GetRouteUrl("cats", new {ct = Eval("Category_Id"), catname = Eval("Category_Name")}) %>'> 
     Link Text 
</asp:HyperLink>

こちらもご覧ください

于 2012-08-28T08:41:54.053 に答える
0

現在の URL からの相対として扱われるようにリンクを作成する場合Categories/1/Apple、URL の先頭にバックスラッシュを追加する必要があります。たとえば/Categories/1/Apple、これにより、URL がルートに対して相対的になります。

アップデート

あなたのコメント " home page url ishttp://localhost:14268/mysite " に基づいて、あなたのサイトは仮想ディレクトリの下で実行されているようです。したがって、単に/URL に追加するだけでは機能しません。たとえば、VD へのパスを URL の前に明示的に追加する必要があります。

<% Request.ApplicationPath %>/Categories/...
于 2012-08-28T08:49:02.190 に答える
0

この例を試してください:

<a href="<%=Request.ApplicationPath%>/Categories/<%# Eval("Category_Id")%>/<%# Eval("Category_Name")%>">

アプリケーションルート<%=Request.ApplicationPath%>を指す相対パスに解決する必要があります...

于 2012-08-28T10:14:19.290 に答える