C# 如何在MVC3中使用MvcPaging2.0使用RouteValue?

C# 如何在MVC3中使用MvcPaging2.0使用RouteValue?,c#,asp.net,.net,asp.net-mvc-3,paging,C#,Asp.net,.net,Asp.net Mvc 3,Paging,Html助手@Html.Pager来自MvcPaging 2.0。具有选项(o=>o.routeValue(对象routeValue)),可以将模型返回控制器,但MvcPaging要求该助手填充IPagedList,因为他居住在其中。这是生成表和分页的模型。实现mvcpaging 2.0的最佳方式是什么。使用SearchModel进行搜索,使用Model显示结果 例如: 型号: public class SearchModel { public string FirstName { ge

Html助手
@Html.Pager
来自MvcPaging 2.0。具有
选项(o=>o.routeValue(对象routeValue))
,可以将模型返回控制器,但MvcPaging要求该助手填充
IPagedList
,因为他居住在其中。这是生成表和分页的模型。实现mvcpaging 2.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; }
}
查看: 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>
控制器

public ActionResult SearchPerson(int?页,SearchModel person)
{
IQueryable query=adapter.GetPersons(person);
会话[“SearchQuery”]=查询;
int currentPageIndex=page.HasValue?page.Value-1:0;
List persons=query.ToList();
返回PartialView(“\u ResultPartial”,
persons.ToPagedList(currentPageIndex,10,persons.Count());
}
公共操作结果AjaxPaging(int?页)
{
IQueryable query=会话[“SearchQuery”]作为IQueryable;
int currentPageIndex=page.HasValue?page.Value-1:0;
List persons=query.ToList();
返回PartialView(“\u ResultPartial”,
persons.ToPagedList(currentPageIndex,10,persons.Count());
}

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

非常感谢你。但是要注意这一点,因为通过使用“页面”项来定义MvcPaging,为了避免生成器中出现重复的键,我建议在以下情况下添加一个简单的条件(item.ToUpper()!=“page”){builder.AddRouteValue(item,request.QueryString[item]);}
@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()));
}
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))