C# 记住以前的过滤器设置
我有一个带有搜索选项的视图,可以过滤结果:C# 记住以前的过滤器设置,c#,asp.net-mvc,asp.net-mvc-3,model,C#,Asp.net Mvc,Asp.net Mvc 3,Model,我有一个带有搜索选项的视图,可以过滤结果: @model GWeb.Models.FilterModel @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Search criteria</legend> @(Html.Telerik().ComboBox()
@model GWeb.Models.FilterModel
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Search criteria</legend>
@(Html.Telerik().ComboBox()
.Name("UserName")
.BindTo(new SelectList(ViewBag.workerList as System.Collections.IEnumerable, "Id", "Desciption"))
.Value(Model.UserName))
@(Html.Telerik().DatePicker()
.Name("StartWork")
.Value(Model.StartWork))
@(Html.Telerik().DatePicker()
.Name("EndWork")
.Value(Model.EndWork))
<input type="submit" value="Filter" />
</fieldset>
}
@{Html.RenderPartial("EmployeeList", (IEnumerable<GWeb.Entities.Work>)ViewBag.employeeList);}
问题:当我编辑其中一个项目并返回主视图时,搜索ciriteria就消失了。如何记住设置为FilterModel
的值?这样,在编辑或查看列表中的项目后,我就可以返回到以前设置的过滤器选项了
非常感谢任何帮助 这是一种常见的情况。我通常让搜索表单使用GET而不是POST(默认)提交,并将Request.urlReferer存储在HttpSession中。然后将此会话值用于取消和重定向操作 以下是一个例子:
<form action="~/Search/Index" method="GET">
...
<submit />
</form>
class SearchController : Controller
{
public ActionResult Index(FilterModel model = null)
{
Session["SearchUrl"] = Request.UrlReferrer.ToString();
var results = get page of results...
return View(results);
}
[HttpPost]
public ActionResult Edit(EditModel model)
{
//update the model...
return Redirect(Session["SearchUrl"]);
}
}
...
类搜索控制器:控制器
{
公共操作结果索引(FilterModel model=null)
{
会话[“SearchUrl”]=Request.urlReferer.ToString();
var results=获取结果页面。。。
返回视图(结果);
}
[HttpPost]
公共操作结果编辑(编辑模型)
{
//更新模型。。。
返回重定向(会话[“搜索URL]”);
}
}
但我在这里不是问如何获取URLreferer,而是问如何获取FilterModel中设置的数据。如果使用get(而不是POST)提交请求,则模型/数据位于url中。通过重定向到存储的url,搜索操作和模型将只起作用:)
public class FilterModel
{
public string UserName { get; set; }
public DateTime? StartWork { get; set; }
public DateTime? EndWork { get; set; }
//...
}
<form action="~/Search/Index" method="GET">
...
<submit />
</form>
class SearchController : Controller
{
public ActionResult Index(FilterModel model = null)
{
Session["SearchUrl"] = Request.UrlReferrer.ToString();
var results = get page of results...
return View(results);
}
[HttpPost]
public ActionResult Edit(EditModel model)
{
//update the model...
return Redirect(Session["SearchUrl"]);
}
}