gpt4 book ai didi

c# - 如何在 MVC3 中使用 MvcPaging2.0 使用 RouteValues?

转载 作者:太空狗 更新时间:2023-10-29 21:40:38 26 4
gpt4 key购买 nike

HTML 助手 @Html.Pager来自 MvcPaging 2.0..Options(o => o.RouteValues(object RouteValues))它可以将 Model 返回给 Controller,但是 MvcPaging 需要此 helper 填充 IPagedList<model>在他住的View里。这是生成table和分页的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; }
}

查看:索引.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>

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()));
}

问题是如何实现MvcPaging2.0使用model for search?或者有没有更好的方式来进行复杂的搜索而​​不是使用model来传递数据查询?有什么想法吗?

我正在使用 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"))

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()));
}

最佳答案

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

关于c# - 如何在 MVC3 中使用 MvcPaging2.0 使用 RouteValues?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11765150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com