我有一个带有搜索选项的视图来过滤结果:
@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);}
RenderPartial是可以编辑的项目列表:
<td>
<a href="@Url.Action("Edit", "Admin", new { id = item.Id })">
<img src="/Content/edit.png" alt="Edit" title="Edit" width="22" height="22" />
</a>
编辑视图是标准的脚手架生成视图。 FilterModel包含:
public class FilterModel
{
public string UserName { get; set; }
public DateTime? StartWork { get; set; }
public DateTime? EndWork { get; set; }
//...
}
问题:当我编辑其中一个项目并返回主视图时,搜索ciriteria消失了。我怎么能记住设置为FilterModel
的值?因此,在编辑或查看列表中的项目之后,我可以回到之前设置的相同过滤器选项吗?
非常感谢任何帮助!
答案 0 :(得分:1)
这是常见的情况。我通常使用GET而不是POST(默认)提交搜索表单,并将Request.UrlReferrer存储在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"]);
}
}