2009-06-09 13 views
40

/Comments/Search/3のようにページをルーティングしています。ここでスレッド "3"のすべてのコメントを検索して表示します。ASP.NET MVC:URLルーティングとクエリ文字列

ソート機能(日付、著者など)を追加しています。それを処理する最善の方法は何ですか? /Comments/Search/3/Sort/Authorまたは/Comments/Search/3?sort=author

MVCのパラメータとしてクエリ文字列sort = authorを自動的に処理するにはどうすればよいですか?

ありがとうございました

答えて

57

私は/ Comments/Search/3?sort = authorを好む。クエリ文字列は、特にパラメータが(この場合のように)SEOの目的に重要でない場合は、プログラムパラメータを渡すのに適しています。パラメータに検索用語として意味的意味が含まれていれば、最初のURLが良いでしょう。

public ActionResult Search(int id, string sort) 

ASP.NET MVCは自動的にあなたのメソッドのパラメータに値をクエリ文字列まで配線します:あなたはこのようなものを使用することができ、コントローラメソッドで

ソート=著者は

検索(3、 "作者")を呼び出します/コメント/検索/ 3は、検索(3を呼ぶのでしょうか?次のルート

routes.MapRoute(
        "Default",            // Route name 
        "{controller}/{action}/{id}",       // URL with parameters 
        new { controller = "Comments", action = "Search", id = "" } // Parameter defaults 
       ); 

/コメント/検索/ 3を使用します)、ヌル

idはので、このURLは失敗する必須であることに留意してください: /コメント/検索

+0

を読んでいました私は、このソリューションのために行くと思います。 sort = 3はオプションなので、どのようにルーティングしてデフォルトを設定しますか? – pistacchio

+0

設定上の慣習のため、メソッドのパラメータをそれぞれ 'id'と 'sort'と呼ぶ必要があることに注意してください。 –

+2

MVC 2では、UrlParameter.Optionalを使用し、アクションパラメータで 'int? 'int id'ではなく' id'を入力し、空の入力テキストを持つデフォルトの検索UIを表示するには '/ Comments/Search'を使います。 – CallMeLaNN

19

ASP.NET MVCはクエリ文字列の場合に自動的にこれを処理します。アクションにはstring sortパラメータを追加するだけです。

どちらが優れていますか?個人的には、コンテンツを表示するにはパスを使用し、は表示し、プレゼンテーション(表示方法、フォーマット方法など)を制御するクエリ文字列を使用します。だから、並べ替えのために、私はquerystringメソッドに行きます。しかしどちらのアプローチでも技術的に不利な点はないと思います。

関連する問題