记住先前的过滤器设置

时间:2012-09-13 14:16:21

标签: 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()
                    .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的值?因此,在编辑或查看列表中的项目之后,我可以回到之前设置的相同过滤器选项吗?

非常感谢任何帮助!

1 个答案:

答案 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"]);
     }
}