web-dev-qa-db-ja.com

ASP.NET MVC:URLルーティングとクエリ文字列

/Comments/Search/3のようなページがあり、スレッド「3」のすべてのコメントを検索して表示します。

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

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

ありがとう

41
pistacchio

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

コントローラーメソッドでは、次のようなものを使用できます。

public ActionResult Search(int id, string sort)

ASP.NET MVCは、クエリ文字列値をメソッドのパラメーターに自動的に結び付けます。

次のルートを使用します

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

/ Comments/Search/3?sort = authorはSearch(3、 "author")を呼び出します

/ Comments/Search/3はSearch(3、null)を呼び出します

Idは必須なので、このURLは失敗します:/ Comments/Search

59
Praveen Angyan

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

どちらが良いですか?個人的には、パスを使用してcontentsを表示し、クエリ文字列を使用してpresentation(表示、フォーマット、...)を制御します。したがって、並べ替えには、querystringメソッドを使用します。しかし、どちらのアプローチにも技術的な欠点はないと思います。

19
Mehrdad Afshari

最善の策は、ルーティングルールを追加して処理することです。ここに便利な記事があります:

http://aspalliance.com/1525_ASPNET_MVC_Framework_Part_2_URL_Routing.2

次に、URLは/ Comments/Search/3/Sort/Authorになります

2
Fenton