我目前正在开发一个应用程序,它使用户能够根据3个搜索参数(AccountID,帐户名和县)搜索帐户列表,这允许用户缩小他们正在处理的帐户列表用。
用户执行的典型搜索是,如果他们说要禁用县内的注销帐户,则可以通过选择郡并单击搜索按钮来完成。然后他们可以点击显示列表中的详细信息链接并进行更新,这样可以正常工作,但我想做的是将用户重定向回原始搜索,维护搜索参数(例如县),如果可能的话,重新运行查询。
有没有人有任何想法我能做到这一点?
提前致谢。
斯图尔特
答案 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参数。