ASP.Net MVC搜索表单在帖子后保留搜索选项

时间:2014-07-29 07:51:31

标签: c# asp.net asp.net-mvc

我目前正在开发一个应用程序,它使用户能够根据3个搜索参数(AccountID,帐户名和县)搜索帐户列表,这允许用户缩小他们正在处理的帐户列表用。

用户执行的典型搜索是,如果他们说要禁用县内的注销帐户,则可以通过选择郡并单击搜索按钮来完成。然后他们可以点击显示列表中的详细信息链接并进行更新,这样可以正常工作,但我想做的是将用户重定向回原始搜索,维护搜索参数(例如县),如果可能的话,重新运行查询。

有没有人有任何想法我能做到这一点?

提前致谢。

斯图尔特

1 个答案:

答案 0 :(得分:0)

像Hadi所说,一个好的解决方案是将搜索条件保存到会话中。 假设搜索条件是操作的输入参数,您需要一种方法来决定是使用输入参数还是先前存储的条件。我选择使用可选的布尔值来确定这一点。

// The data structure that is stored to the session
class SearchCriteria
{
    public int? AccountId;
    public string AccountName;
    public string County;

    public SearchCriteria(int? accountId, string accountName, string county)
    {
        AccountId = accountId;
        AccountName = accountName;
        County = county;
    }

}

 public class SearchResultViewModel
{
    public int? AccountId { get; set; }
    public string AccountName { get; set; }
    public string County { get; set; }
    public List<string> Counties { get; set; }
    public bool AlterCriteria { get; set; }

    public List<Entity> SearchResultEntities { get; set; } 

}

public ActionResult SearchResult(SearchResultViewModel model)
    {

        ....

        // The search should use the search criteria that is stored in the session
        if (!model.AlterCriteria)
        {
            // Attempt to retrieve from session
            var searchCriteria = Session["searchCriteria"] as SearchCriteria;

            // Use previous search criteria if any
            if (searchCriteria != null)
            {
                query.AccountId = searchCriteria.AccountId;
                query.AccountName = searchCriteria.AccountName;
                query.County = searchCriteria.County;
            }

        }
            // Provided input should be used as search criteria
        else
        {
            // Saved to session
            var searchCriteria = new SearchCriteria(model.AccountId, model.AccountName, model.County);
            Session["searchCriteria"] = searchCriteria;
        }


        model.Counties = Database.GetCounties();

        model.SearchResultEntities = Database.GetEntities(query);

        return View(model);

    }

SearchResult.cshtml:

@model SearchResultViewModel

@Html.BeginForm("SearchResult"){

@Html.HiddenFor(m => m.AlterCriteria, new { @Value = true })
@Html.TextBoxFor(m => m.AccountId)    
@Html.TextBoxFor(m => m.AccountName)
@Html.DropDownListFor(m => m.County, new SelectList(Model.Counties))

.........    

}

.......

使用此代码,对SearchResult的任何调用(例如重定向)都将使用先前保存的搜索条件,而更改搜索过滤器的调用则需要包含alterCriteria = true参数。