1

これが私のルートです。必要な唯一のパラメーターはコントローラーです

        routes.MapRoute(
            "countryoptional/controller",
            "{country}/{controller}/{pagelabel}/{page}",
            new { action = "index", country = UrlParameter.Optional,  pagelabel = UrlParameter.Optional, page = UrlParameter.Optional },
            new
            {
                pays = @"$|^(france|belgium)$",
                controller = @"^(car|boat)$",
                pagelabel = @"^$|page",
                page = @"^$|\d{1,6}"
            }
        );

次の URL が動作することを期待しています。

/車/

/車/ページ/2

/フランス/車

/フランス/車/ページ/2

それは一種の作品です:

Url.Action("index", "car", new { country= "france", pagelabel = "page", page = 2} )

生成します: /france/car/page/2

しかし

国なしのURLが必要な場合、ビューアクションは応答しますが、コンストラクターは次のようになります

Url.Action("index", "car", new { pagelabel = "page", page = 2} )

このリンクが生成されます: //car/page/2

この二重スラッシュ「//car」を取得するため、もちろんリンクが壊れます。

{country}/{controller}/... URL 定義で {country} パラメーターがコントローラーの前にある可能性が気に入らないのではないかと思います。ルート構成を複雑にして、別のルート宣言を作成したくありません。道でなければならない、私が間違っていることは何ですか?

4

1 に答える 1

4

オプションのパラメーターは、必須パラメーターの後に続く必要があります。私が知っているこれを回避する方法はありません。同じ制限が他のどこにも適用されます (メソッド定義など)。

ルートを繰り返して、必要な国があるものとないものを用意します。MVC は、どちらを使用するかを決定します。

于 2013-03-28T20:03:13.060 に答える