Dav*_*bak 6 .net c# asp.net paging asp.net-mvc-3
@Html.Pager
来自MvcPaging 2.0的 Html助手.有.Options(o => o.RouteValues(object RouteValues))
哪些可以返回模型回控制器,但MvcPaging需要这个帮手来填充IPagedList<model>
鉴于他住在这是生成表和分页模型.实现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; }
}
Run Code Online (Sandbox Code Playgroud)
查看: 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>
Run Code Online (Sandbox Code Playgroud)
_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>
Run Code Online (Sandbox Code Playgroud)
CONTROLLER
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()));
}
Run Code Online (Sandbox Code Playgroud)
问题是如何使用模型进行搜索来实现MvcPaging2.0?还是有另一种方法,更好的方法,有复杂的搜索而不使用模型来传输数据查询?有什么想法吗?
我正在使用MvcPaging 2.0.,docs
编辑:*
感谢Darin的回答,但我设法像这样:
*_ResultPartial.cshtml*
@Html.Pager(Model.PageSize, Model.PageNumber,
Model.TotalItemCount, new AjaxOptions
{
UpdateTargetId = "main_search_result_table_id"
}).Options(o => o.Action("AjaxPaging"))
Run Code Online (Sandbox Code Playgroud)
CONTROLLER
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()));
}
Run Code Online (Sandbox Code Playgroud)
您可以编写一个自定义扩展方法,它将收集所有查询字符串参数,并将它们添加到页面链接以及所有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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
.Options(o => o.RouteValues(Model).AddFromQueryString(Request))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1746 次 |
最近记录: |