1

ASP.NetMVCのRC1バージョンに問題があります。「デフォルト」ルートの前にルートを追加すると、作成される結果のURLは最初に追加されたルートのものになります。

これがGlobal.asax.csでの私のルーティングです

routes.MapRoute(
            "product-detailed",
            "Products/{controller}/{action}/{id}",
            new { controller = "ProductSubType", action = "Index", id = "" }
        );

        routes.MapRoute(
            "Default",                                              
            "{controller}/{action}/{id}",                           
            new { controller = "Home", action = "Index", id = "" }  
        );

私のURLの作成:

        <%= Html.ActionLink("Bikes", "Index", "Bikes") %><br />
        <%= Html.RouteLink("Bikes", "product-detailed", new { controller = "Bikes", action = "Index" }) %>

最初のActionLinkが「/Bikes/ Index」のようなURLを作成し、2番目のRouteLinkが「/ Products / Bikes / Index」を作成することを期待しますが、両方のUrlは「/ Products / Bikes/Index」になります。

ここでルーティングに何が欠けていますか?

ありがとう。

4

1 に答える 1

4

あなたは何も見逃していません。設計どおりに機能しています。

コントローラーとアクションは両方とも最上位ルートで可変であり、有効な値に制限がないため、そのルートはコントローラーとアクションのすべての値に対して有効です。

考えられる回避策:

  • コントローラやアクションの値を修正して、URLの一部にならないようにします
  • コントローラおよび/またはアクションの値のトップルートに制限を追加します
  • アクションリンクの代わりにルートリンクを常に使用してください。アクションリンクは、どのルートが正しいルートであるかを明確に示しているためです。
于 2009-02-04T05:58:28.780 に答える