再び同じASP.NET MVCのアクションを繰り返す方法は?
-
21-08-2019 - |
質問
私は、検索の結果を示したリストと呼ばれる作用を有します。彼らはオプションですので、それはクエリ文字列を通じてパラメータを受け取ります。私のメソッドのシグネチャは次のようになります:
public ActionResult List(List<int> categoryIDs, string school, int? stateID, int? page)
CategoryIDs複数選択ボックスであり、私はGETリクエストの上にすべてをやっています。私は何をする必要があることは次のページに私の見解でリンクを作成しても同じ検索パラメータを保持しています。私は手でリンクを構築することができます知っているが、categoryIDsは、「?カテゴリID = 1&カテゴリID = 2&カテゴリID = 3」のリストにバインドするようにフォーマットする必要がある場合は特に、内蔵方式のルーティングのいずれかを使用することが可能です。<? / P>
解決
私は、あなたがデフォルトであることを行うことができます何ActionLink
のオーバーロードがありませんと思います。あなたが含めたいパラメータでRouteValueDictionary
インスタンスを移入する必要があります。
categoryIDs=2,3,4,5
で許可されていないので、カテゴリのリストについては、RouteValueDictionary
などのようにS / Tしてみてください。その後、アクションメソッドに整数リストに文字列を解析する必要があります。
他のヒント
あなたはこれを行うことができる必要があります:
現在のすべての値がデフォルトで渡す必要があります。私は正しい過負荷を参照してることを確認するのに、それを試してみる必要があると思います。
私はアクションを検索し、ビューにパラメータオブジェクトを渡すためのパラメータとしてオブジェクトを渡したいです。したがって、このようなあなたのコントローラ内のいくつかのコード(と私はロブConeryのPagedListクラスを使用しています注意してくださいの):
public class SearchParameters {
public string School { get; set; }
public int? StateID { get; set; }
public int? Page { get; set; }
public SearchParameters GetPage(int page) {
return new SearchParameters {
School = School,
StateID = StateID,
Page = page
};
}
}
public class SearchViewModel {
public PagedList<[YourResultType]> Results { get; set; }
public SearchParameters Parameters { get; set; }
}
// ...
public ActionResult Search(SearchParameters parameters) {
IQueryable<[YourResultType]> query;
// ... do some stuff to get your search results
return View("Search", new SearchViewModel {
Results = query.ToPagedList(parameters.Page - 1), 15),
Parameters = parameters
});
}
だからあなたの検索ビューは、このようなページ宣言でジェネリックビューページ
<%@ Page ... Inherits="ViewPage<SearchViewModel>" %>
すると、検索ビューで、あなたはこのような何かを行うことができます...
<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
<%= Html.ActionLink(i + 1).ToString(), "Search",
Model.Parameters.GetPage(i + 1)) %>
<% } %>