【发布时间】:2025-11-27 15:40:01
【问题描述】:
我有一个使用 ASP.NET MVC 框架编写的 Web 应用程序。在我的Homecontroller 中,我有一个名为Index 的操作,它响应Get 请求。在此操作中,我使用IPagedList 库创建页面以将记录分成多个页面。我的Index@HttpGet 看起来像这样
public ActionResult Index(int? id)
{
using(var connection = new Context())
{
int pageNumber = (id ?? 1);
var presenter = new Presenter
{
Presenter = pageNumber,
Tasks = connection.Tasks.ToPagedList(pageNumber, 30),
Form = new TasksFiltersViewModel()
}
return View(presenter);
}
}
我还有一个名为Index 的操作,它响应Post 应用一些过滤器的请求。所以在Post 请求中我做了这样的事情
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(Presenter model)
{
int pageNumber = (id ?? 1);
if (ModelState.IsValid)
{
using(var connection = new Context())
{
model.Tasks = connection.Tasks
.Where(task => task.Status == 5)
.ToPagedList(pageNumber, 30);
}
}
return View(model);
}
这也可以正常工作,除非用户更改页面然后过滤器休息。
这是我的演示课的样子
public class Presenter
{
public IPagedList<Task> Tasks { get; set; }
public TasksFiltersViewModel Form { get; set; }
public int PageNumber { get; set; }
public IEnumerable<SelectListItem> Statuses { get; set; }
}
如何在保留过滤器的同时允许用户使用页面?
这是我的过滤器虚拟机
public class TasksFiltersViewModel
{
public int Status { get; set; }
}
视图是这样的
@using (Html.BeginForm("Index", "Tasks", FormMethod.Post, new { @class = "form-horizontal" }))
{
@Html.AntiForgeryToken()
<div class="form-group">
@Html.LabelFor(m => m.Form.Status, new { @class = "control-label col-sm-3" })
<div class="col-sm-9">
@Html.DropDownListFor(m => m.Form.Status, Model.Statuses, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Form.Status, "", new { @class = "text-danger" })
</div>
</div>
<div class="row">
<div class="col-sm-9 col-md-push-3">
<div>
<button type="submit" class="btn btn-default">Filter</button>
</div>
</div>
</div>
}
foreach (var task in Model.Tasks)
{
<tr>
<td>@task.Name</td>
<td>@task.Type</td>
<td>@Html.ActionLink("Edit", "Details", "Task", new { @id = task.Id }, new { @class = "btn btn-primary btn-sm" })</td>
</tr>
}
@Html.PagedListPager(Model.Tasks, id => Url.Action("Index", new { id }))
【问题讨论】:
-
也许使用cookies?
-
同时命名
DbContext实例connection不是我愿意接受的... . -
您需要展示您的视图,我假设它有一个发布到
Index()方法的表单。它应该有FormMethod.Get,所以它回发到 GET 方法,并且该方法包含过滤器的参数 -
同时显示您的
TasksFiltersViewModel模型 -
@StephenMuecke 我用你的要求更新了我的问题
标签: c# asp.net-mvc entity-framework asp.net-mvc-5 pagedlist