我有一个搜索页面,您可以根据姓名,电话号码,帐号或客户编号搜索客户。然后我浏览了7个不同的数据库,试图匹配这些东西以带回结果。因此,我宁愿只运行一次搜索并记住我可以在页面中显示的结果。下面是我用于SearchResults页面的ViewModel。
public class SearchResultsViewModel
{
public IEnumerable<CustomerSearchResults> SearchResults { get; set; }
public PagingInfo PagingInfo { get; set; }
}
public class PagingInfo
{
public int TotalItems { get; set; }
public int ItemsPerPage { get; set; }
public int CurrentPage { get; set; }
public int TotalPages {
get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }
}
}
以下是SearchResults页面的控制器代码
public ActionResult SearchResults(int page = 1)
{
SearchResultsViewModel srvm = new SearchResultsViewModel
{
SearchResults = res.Skip((page - 1) * pageSize).Take(pageSize),
PagingInfo = new PagingInfo { CurrentPage = page, ItemsPerPage = pageSize, TotalItems = res.Count() }
};
ViewBag.CurrentPage = page;
return View("SearchResults", srvm);
}
[HttpPost]
public ActionResult Index(IndexViewModel vm)
{
res = GetSearchResults(vm);
return SearchResults();
}
res是控制器中的全局变量。我想也许我可以保存那些在不同页面上显示的数据,但很快就发现我每次拉出一个视图都会得到一个新的控制器,所以这不起作用。
“视图代码”仅在表格中显示搜索结果,并在底部有一个HTML帮助程序,显示页码链接。页码链接是使用正确的页码调用SearchResults操作的锚点。
我可以保存数据以使用表单页面或这是不可能的吗?我有更好的方法吗?
答案 0 :(得分:0)
如何缓存它,一个例子是通过Windows AppFabric
答案 1 :(得分:0)
您可以将结果存储在TempData中。
public ActionResult SearchResults(int page = 1)
{
res = (SearchResults)TempData["results"];
SearchResultsViewModel srvm = new SearchResultsViewModel
{
SearchResults = res.Skip((page - 1) * pageSize).Take(pageSize),
PagingInfo = new PagingInfo { CurrentPage = page, ItemsPerPage = pageSize, TotalItems = res.Count() }
};
ViewBag.CurrentPage = page;
TempData["results"] = res;
return View("SearchResults", srvm);
}
[HttpPost]
public ActionResult Index(IndexViewModel vm)
{
res = GetSearchResults(vm);
TempData["results"] = res;
return SearchResults();
}
您可以使用Session状态执行相同的操作,然后您不必在每个操作结束时将其保存回来,但是您有一些额外的开销,并且您必须确保在你已经完成了,或者你可以在以后获得一些时髦的结果。只是需要注意的一些事项。