1

にせずに、私は次のルートを必要とする:ASP.NET MVCルーティング:1つのアクションにクエリ文字列を、別の

example.com/products
(例えば乗用車、トラック、バス、バイク)
コントローラ製品カテゴリページに行きます= Products、アクション= Categories()

example.com/products?a=1&b=2
は、特定のカテゴリ内のすべての製品の指標になり(例えば、フォード、ホンダ、シボレー)
コントローラ= Products、action = Index(string a, string b)

ルートはクエリ文字列上でのみ異なり、MVCは "?"の後には何も無視しているようです。もちろん最初のルールは1つだけです。

どのように2つを区別しますか?

編集:とは異なって言いますが、私は2つのルートが必要です。ルート内のクエリ文字列を使用することは可能ですか、それともMVCはそれを本当に無視しますか?私はカスタムバインディングとカスタム検証を行うことができるように、それをハックするか、何らかのカスタムルーティングスキームを使用する方法はありますか?

+0

このようなURLを使用する必要はありません。aとbが設定されている場合は正しいビューを返し、そうでない場合はインデックスを返します。 URLを次のように区別しないのはなぜですか? 'example.com/products' ' example.com/products/a/b' つまり、なぜaとbをクエリパラメータにしますかURLの一部ではなく?それらをURLの一部にすると、ルーティングは簡単です。複雑なルート(最初に 'a'と' b'が必要です)とあまり複雑ではないルートを2番目に置いてください。 – Cymen

+0

ありがとうございますが、それはリソースであるルート自体に一時的なデータをエンコードするので、私たちがやっていることではありません。これはデータを適切にフォーマットするクエリ文字列の目的です。あなたの最初の提案まで、はい、私たちはすべてのものを1つのアクションメソッドに詰め込んで、どのビューを返すかを決めることができます - しかし、私は自分のルーティングを行っていますが、それは愚かなようです。私。 – mvcstudent

+0

これについての議論がstackoverflow上にあります。これは適切かもしれません:http://stackoverflow.com/questions/968904/asp-net-mvc-url-routing-vs-querystring – Cymen

答えて

1

パラメータを導入する。 ASP.NET MVCは、あなたが 'かなり' URLを作成することができ、そしてそれはあなたがここに何をすべきかを正確です:

まず、ルートのマッピング:

routes.MapRoute(
    "SpecificProducts", 
    "products/{a}/{b}", 
    new { controller = "products", action = "Categories" } 
    ); 

routes.MapRoute(
    "ProductsIndex", 
    "products". 
    new { controller = "products", action = "Index" } 
    ); 

次に、コントローラのアクション

public ActionResult Index() 
{ 
} 

public ActionResult Categories(string a, string b) //parameters must match route values 
{ 
} 

これにより、検索に適したURLを使用できるようになり、クエリ文字列パラメータについて心配する必要はありません。

+0

アドバイスをいただきありがとうございます。それにもかかわらず、クエリーストリングのパラメータでそれを行うことはできますか?それはIMHOを行う "適切な"方法です。ルートは、データの書式設定を知らなくてはなりません。私は何度も同様の問題を抱えていましたが、MSのルーティング担当者はここで優れた設計作業をしていないようです。 – mvcstudent

+0

@mvcstudent:失敗したmsデザインではありません。あなたのアクションでnullになる可能性のあるパラメータを処理するだけでOKです。 1つのルートのみを使用し、AとBを「オプションパラメータ」に設定します。 – Iridio

+0

しかし、それでも疑問に答えることはできません - 上記のシナリオでは2つのルートを持つことが可能ですか?カスタムモデルのバインダーを使用しているので、フレームワークの制限のためにそれをハッキングすることは理想的ではありません。 – mvcstudent

関連する問題