2

検索結果を表示する List というアクションがあります。パラメータはオプションであるため、クエリ文字列を介してパラメータを受け取ります。私のメソッド署名は次のようになります。

public ActionResult List(List<int> categoryIDs, string school, int? stateID, int? page)

CategoryIDs は複数選択ボックスであり、GET 要求ですべてを実行しています。ビューに次のページへのリンクを作成する必要がありますが、同じ検索パラメーターを保持します。リンクを手動で作成できることはわかっていますが、特にカテゴリ ID を「?categoryID=1&categoryID=2&categoryID=3」のようにフォーマットしてリストにバインドする必要がある場合は、組み込みのルーティング方法を使用できますか?

4

3 に答える 3

1

ActionLinkデフォルトでそれを行うのに役立つオーバーロードはないと思います。RouteValueDictionary含めるパラメータをインスタンス に入力する必要があります。

カテゴリのリストについては、でcategoryIDs=2,3,4,5キーを繰り返すことは許可されていないため、s/tなどを試してくださいRouteValueDictionary。その後、アクションメソッドで文字列を整数リストに解析する必要があります。

于 2009-02-05T08:43:29.397 に答える
0

これを行うことができるはずです:

デフォルトでは、すべての現在の値を渡す必要があります。ただし、正しいオーバーロードを参照していることを確認するために、試してみる必要があります。

于 2009-02-05T04:26:51.210 に答える
0

オブジェクトをパラメーターとして検索アクションに渡し、そのパラメーター オブジェクトをビューに渡すのが好きです。したがって、次のようなコントローラーのコードを使用します ( Rob 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
    });
}

したがって、検索ビューは、次のようなページ宣言を持つジェネリック ViewPage<T> から継承します。

<%@ Page ... Inherits="ViewPage<SearchViewModel>" %>

次に、検索ビューで、次のようなことができます...

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
于 2009-07-20T01:43:41.467 に答える