如何在MVC3中使用MvcPaging2.0使用RouteValues

本文关键字:MvcPaging2 使用 RouteValues MVC3 | 更新日期: 2024-09-20 19:10:54

Html helper @Html.Pager来自MvcPaging 2.0。.Options(o => o.RouteValues(object RouteValues)),它可以将Model返回给Controller,但MvcPaging要求此helper在其居住的View中填充IPagedList<model>。这是生成表和分页的Model。实现mvcpage2.0的最佳方式是什么。使用SearchModel进行搜索,使用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; }
}

视图:索引.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.chtml

@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?或者还有其他更好的方法,可以进行复杂的搜索,而不使用模型来传递数据查询吗?有什么想法吗?

我正在使用MvcPaging 2.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()));
}

如何在MVC3中使用MvcPaging2.0使用RouteValues

您可以编写一个自定义扩展方法,该方法将获取所有查询字符串参数,并将它们添加到页面链接中,此外还有所有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))