6

MvcPaging2.0の@Html.PagerHTMLヘルパー。モデルをコントローラーに戻すことができるが、MvcPagingでは、このヘルパーを、彼が住んでいるビューに入力する必要があります。これは、テーブルとページングを生成するモデルです。mvcpaging2.0を実装するための最良の方法は何ですか。検索にSearchModelを使用し、結果を表示するためにModelを使用しますか?.Options(o => o.RouteValues(object RouteValues))IPagedList<model>

例:

モデル:

public class SearchModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Person
{
    [Key]
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Dob { get; set; }
    public string City { get; set; }
}

ビュー: Index.cshtml

@using (Ajax.BeginForm("Search", "SearchPerson", new AjaxOptions
{
    HttpMethod = "GET",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "main_search_result_table_id"
}))
{    
    @Html.TextBoxFor(m => m.FirstName)
    @Html.TextBoxFor(m => m.LastName)
    <input type="submit" value="Search"/>
}
 <div id="main_search_result_table_id">
      @{Html.RenderPartial("_InitPartialEmpty");}
 </div>

_ResultPartial.cshtml

@using MvcPaging
@model IPagedList<Models.Person>

<table>
@foreach (var p in Model)
{
<tr>
    <td>@p.FirstName</td>
    <td>@p.LastName</td>
    <td>@p.Dob</td>
    <td>@p.City</td>
</tr>
}
<table>

 @Html.Pager(Model.PageSize, Model.PageNumber,
                 Model.TotalItemCount,  new AjaxOptions 
 { 
     UpdateTargetId = "main_search_result_table_id"
 }).Options(o => o.RouteValues(Model)) //==> IPagedList<Models.Person>

コントローラ

public ActionResult SearchPerson(int? page,SearchModel person)
{
    List<Person> result= adapter.GetPersons(person);

    int currentPageIndex = page.HasValue ? page.Value - 1 : 0;

    return PartialView("_ResultPartial", 
                result.ToPagedList(currentPageIndex, 10, result.Count()));
}

問題は、検索にモデルを使用してMvcPaging2.0を実装する方法です。または、データクエリを転送するためにモデルを使用せずに、複雑な検索を行う別の方法、より良い方法はありますか?何かご意見は?

MvcPaging2.0を使用しています。、ドキュメント

編集:*

答えてくれたDarinに感謝しますが、私はなんとか次のようにそれを引き出すことができます:

* _ResultPartial.cshtml *

@Html.Pager(Model.PageSize, Model.PageNumber,
             Model.TotalItemCount,  new AjaxOptions 
{ 
 UpdateTargetId = "main_search_result_table_id"
 }).Options(o => o.Action("AjaxPaging"))

コントローラ

public ActionResult SearchPerson(int? page,SearchModel person)
{
    IQueryable<Person> query= adapter.GetPersons(person);

    Session["SearchQuery"] = query;

    int currentPageIndex = page.HasValue ? page.Value - 1 : 0;

    List<Person> persons = query.ToList();

    return PartialView("_ResultPartial", 
                persons.ToPagedList(currentPageIndex, 10, persons.Count()));
}


public ActionResult AjaxPaging(int? page)
{
    IQueryable<Person> query = Session["SearchQuery"] as IQueryable<Person>;

    int currentPageIndex = page.HasValue ? page.Value - 1 : 0;

    List<Person> persons = query.ToList();

    return PartialView("_ResultPartial", 
                persons.ToPagedList(currentPageIndex, 10, persons.Count()));
}
4

1 に答える 1

5

すべてのクエリ文字列パラメーターを収集し、それらをすべてのcurrentPage、pageNumber、totalItemCountなどに加えてページリンクに追加するカスタム拡張メソッドを作成できます。

public static class PagerOptionsBuilderExtensions
{
    public static PagerOptionsBuilder AddFromQueryString(
        this PagerOptionsBuilder builder, 
        HttpRequestBase request
    )
    {
        foreach (string item in request.QueryString)
        {
            builder.AddRouteValue(item, request.QueryString[item]);
        }
        return builder;
    }
}

その後:

.Options(o => o.RouteValues(Model).AddFromQueryString(Request))
于 2012-08-20T09:54:04.387 に答える