2010-12-03 12 views
0

私の問題は、3つのフィルタリングを行う必要があるため、私は自分のアクションに3つのパラメータ(カテゴリ、都市、ページ)を与え、それらのうちのいくつかがヌルになる可能性があるということです。asp.net mvcアクションへの複数のパラメータルーティングの問題

それらの両方 (category != null && city != null)

によって

  • カテゴリ別に1 (category != null && city == null)
  • 都市ずつ(category == null && city != null)
  • 1私の問題は、ルーティングです。 (category != null && city == null)の場合は動作しません。それは私のアクションのnull値からカテゴリパラメータを与え、私のcityパラメータはカテゴリの値を受け取ります。

    私のGlobal.asax:

    routes.MapRoute(
          "ListByCity", 
          "Advertisers/{city}/{page}", 
          new { controller = "Advertisers", action = "List" } 
          ); 
    
         routes.MapRoute(
          "ListByCategory", 
          "Advertisers/{category}/{page}", 
          new { controller = "Advertisers", action = "List" } 
          ); 
    
         routes.MapRoute(
          "List", 
          "Advertisers/{category}/{city}/{page}", 
          new { controller = "Advertisers", action = "List" } 
          ); 
    

    私を助けてください。

+1

代わりにクエリ文字列を使用 –

答えて

1

反対の方法で問題を考える。 URLがある場合http://YourServer/Advertisers/Textそのテキストがカテゴリであるか都市であるかはどのように分かりますか? 一致する問題を正規表現で解決できますが、都市とカテゴリの両方が文字列なので、ルーティングシステムに一致するものを教える方法がありません。 それらを区別する必要があります。/Advertisers/Categories/{category}と一致するルートを作成し、/ Advertisers/Cities/{city}と一致するルートを作成することがあります。私にはより多くのような3つの別々のアクションになります

+0

データベースから都市/カテゴリを含めると、正規表現との一致問題を解決できます。それはうまくいくかもしれない。 –

+0

労働者、ありがとう、チップのために。 ;) –

1

/Advertisers/List/{category}/{city}/{page} 
/Advertisers/ListByCity/{city}/{page} 
/Advertisers/ListByCategory/{category}/{page} 

これらはすべて、あなたのリスト表示のためのモデルを準備するために、あなたのコントローラに共通のメソッドを呼び出すことができます。

EDIT:

それとも、「すべて」というカテゴリと「すべて」と呼ばれる都市を追加すると、あなたはわずか1ルート得ることができる必要があります:クエリ文字列を使用する

/Advertisers/List/{category}/{city}/{page} 
+0

私はあなたに同意しますが、私はURLに私のアクション名は必要ありません。 –

+0

なぜですか?これはデフォルトの方法です: '{c​​ontroller}/{action}/{parameter}'。また、クエリ文字列を使用したり、URLにパラメータとして検索のタイプ​​を含めたりしないと、あなたがしたいことは本当に可能ではないと思います。または、パラメータの順序を変更し( '{page} 'を前面に移動)、リストを生成する前に、コントローラにどのタイプのパラメータがあるのか​​把握してください。 – mlibby

0

私は@ MCLの編集に同意します。あなたは同様のやり方も取らずにこのアプローチをとることができます。

/Advertisers/All/NewYork/1 
/Advertisers/SomeCategory/NewYork/2 

あなたの設定あなたのルートをこのような何か:

routes.MapRoute(
     "List", 
     "Advertisers/{category}/{city}/{page}", 
     new { controller = "Advertisers", action = "List" }); 

そして、あなたのアクションになります。この思う:

public ActionResult List (string category, string city, int page) { .. } 

を私はまた、この場合のクエリ文字列と一致しません。そのURIパターンはあなたのアプリケーションの中核部分であり、あなたのために適切なルートシステムを設定しないと、長期的にはあなたを妨げるだろうと感じています。

関連する問題