ASP.NET PagedList.MVC for ajax with PartialView
ASP.NET PagedList.MVC for ajax with PartialView
我正在使用 PagedList.Mvc,但遇到了一些问题。所以我有一个索引视图,我可以从下拉列表中 select 国家并使用 ajax 提交。
查看:
@model testModel.Models.Test
@using (Ajax.BeginForm("GetEmployee", "Test", new AjaxOptions
{
HttpMethod = "POST",
UpdateTargetId = "showResult"
}))
{
@Html.AntiForgeryToken()
@Html.DropDownList("CountryId", null, "-- Select Country --")
<input type="submit" value="Search" class="btn btn-default" />
}
<div id="showResult"></div>
在我的 GetEmployee Controller 方法中,我循环遍历数据库并将模型对象传递给局部视图。
控制器:
[HttpPost]
public ActionResult GetEmployee(int CountryId, int? page)
{
var model = db.Employee
.Include(x => x.Country)
.Where(x => x.Country.CountryId == CountryId)
.ToList();
int pageSize = 3;
int pageNumber = (page ?? 1);
return PartialView("PartialEmployee", model.ToPagedList(pageNumber, pageSize));
}
在我的 partialEmployee 视图中,我在 table 中显示员工姓名。
部分员工视图:
@model PagedList.IPagedList<testModel.Models.Employee>
@using PagedList.Mvc;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
@{
Layout = null;
}
<table class="table table-hover">
<tr>
<th>Username</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.EmployeeName)
</td>
</tr>
}
</table>
<br />
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
<div id="contentPager">
@Html.PagedListPager(Model, page => Url.Action("Index", new { page }))
</div>
所以这里的问题是,当我单击下一页(例如:2)时,它 returns 返回到索引页面,但没有任何 table 显示在 UpdateTargetId 中。
<div id="showResult"></div>
如有任何建议或示例代码,我们将不胜感激。
- 将网络方法类型更改为
GET
而不是 POST
- 从
GetEmployee()
方法中删除 HttpPost
属性
- 将您的
Url.action
更改为 Url.Action("GetEmployee", new { page,
CountryId=Model.FirstOrDefault().CountryId })
好的,根据 Stephen 和 Aldo 的评论,我明白了。
我必须添加 ViewBag.CountryId = CountryId;
在 GetEmployee 方法中,因此它可以在视图中使用。
因此在视图中:
@Html.PagedListPager(Model, page => Url.Action("GetEmployee",
new
{
page,
CountryId = ViewBag.CountryId
}), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "showResult" }))
工作顺利。
我正在使用 PagedList.Mvc,但遇到了一些问题。所以我有一个索引视图,我可以从下拉列表中 select 国家并使用 ajax 提交。
查看:
@model testModel.Models.Test
@using (Ajax.BeginForm("GetEmployee", "Test", new AjaxOptions
{
HttpMethod = "POST",
UpdateTargetId = "showResult"
}))
{
@Html.AntiForgeryToken()
@Html.DropDownList("CountryId", null, "-- Select Country --")
<input type="submit" value="Search" class="btn btn-default" />
}
<div id="showResult"></div>
在我的 GetEmployee Controller 方法中,我循环遍历数据库并将模型对象传递给局部视图。
控制器:
[HttpPost]
public ActionResult GetEmployee(int CountryId, int? page)
{
var model = db.Employee
.Include(x => x.Country)
.Where(x => x.Country.CountryId == CountryId)
.ToList();
int pageSize = 3;
int pageNumber = (page ?? 1);
return PartialView("PartialEmployee", model.ToPagedList(pageNumber, pageSize));
}
在我的 partialEmployee 视图中,我在 table 中显示员工姓名。
部分员工视图:
@model PagedList.IPagedList<testModel.Models.Employee>
@using PagedList.Mvc;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
@{
Layout = null;
}
<table class="table table-hover">
<tr>
<th>Username</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.EmployeeName)
</td>
</tr>
}
</table>
<br />
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
<div id="contentPager">
@Html.PagedListPager(Model, page => Url.Action("Index", new { page }))
</div>
所以这里的问题是,当我单击下一页(例如:2)时,它 returns 返回到索引页面,但没有任何 table 显示在 UpdateTargetId 中。
<div id="showResult"></div>
如有任何建议或示例代码,我们将不胜感激。
- 将网络方法类型更改为
GET
而不是POST
- 从
GetEmployee()
方法中删除HttpPost
属性 - 将您的
Url.action
更改为Url.Action("GetEmployee", new { page, CountryId=Model.FirstOrDefault().CountryId })
好的,根据 Stephen 和 Aldo 的评论,我明白了。
我必须添加 ViewBag.CountryId = CountryId; 在 GetEmployee 方法中,因此它可以在视图中使用。
因此在视图中:
@Html.PagedListPager(Model, page => Url.Action("GetEmployee",
new
{
page,
CountryId = ViewBag.CountryId
}), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "showResult" }))
工作顺利。