[英]How to save query values when searching? ASP.NET MVC
我有这样一种动作方法:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Search(String filter, String value, Int32? page) {
var set = new List<Employee>();
switch(filter) {
case "by-name": {
set = this.repository.Get(
e => (e.LastName + " " + e.FirstName + " " + e.MiddleName) == value
).ToList();
break;
}
case "by-empn": {
set = this.repository.Get(
e => e.EmployeeNumber == value
).ToList();
break;
}
default: return RedirectToAction("Search", "Employee");
}
ViewBag.SearchedEmployees = set.Count();
return View(set.ToPagedList(page ?? 1, PageSize));
}
搜索视图是这样的:
@if(Model.Count > 0) {
foreach(var item in Model) {
Html.RenderPartial("Employee.Card", item);
}
@Html.PagedListPager(
Model,
page => Url.Action("Search", new { page = page }),
new PagedListRenderOptions {
LinkToFirstPageFormat = "<< Beginning",
LinkToPreviousPageFormat = "< Back",
LinkToNextPageFormat = "Forth >",
LinkToLastPageFormat = "End >>"
}
)
}
搜索表单显示为部分视图:
@using(Html.BeginForm("Search", "Employee", FormMethod.Get, new { @class = "search-form" }))
{
<p>
@Html.TextBox("value")
</p>
<p>
@Html.RadioButton("filter", "by-name", true) By name <br/>
@Html.RadioButton("filter", "by-empn") By empn <br/>
</p>
<p>
<input type="image" src="@Url.Content("~/Content/Images/Search.png")" />
</p>
}
问题:我有N
页面链接。 当我尝试转到第二页时,我面临重定向的无限循环。 这就是我执行动作的方式-触发了默认情况。 那么在第二个操作调用中, filter/value
值是否为null
? 为什么? 如何重构搜索动作?
另外,我应该如何为这种动作配置路由?
谢谢!
编辑
因此,搜索操作的路由应如下所示:
routes.MapRoute(
null,
"{controller}/{action}/Page{page}/filter{filter}/val{value}",
new { controller = "Employee", action = "Search" }
);
?
编辑2
因此可以写下一个:
page => Url.Action("Search", new { filter = ViewBag.SearchFilter, value = ViewBag.SearchValue, page = page }),
在控制器内部:
public ActionResult Search(String filter, String value, Int32? page) {
ViewBag.SearchFilter = filter;
ViewBag.SearchValue = value;
// ...
}
这是正确的吗?
那么在第二个操作调用中,过滤器/值的值是否为空? 为什么?
因为它们对应的输入字段位于单独的表单中,所以永远不会发送到服务器。
您似乎正在使用一些自定义的Html.PagedListPager
帮助程序(您尚未显示的代码),但是我想这个帮助程序将页面链接生成为锚点,并且它根本没有考虑到任何当前查询字符串或POSTed值生成这些链接时。 因此,分页链接的href
看起来像是/SomeController/Search?page=5
而不是正确的参数,后者会考虑到/SomeController/Search?page=5&filter=somefilter&value=somevalue
那些参数。
现在,您可以轻松地理解为什么控制器操作中的filter
和value
参数始终为空。 这是因为单击分页链接时,您永远不会将它们发送到服务器。
因此,为了解决此问题,您可以修改用于生成分页链接的自定义HTML帮助器,以包括这些附加参数。 也许助手允许您传递其他参数? 如果这是您正在使用的某些第三方插件,请查阅文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.