Asp.net mvc 3 MVC3在更改页面时保存搜索结果
我有一个搜索页面,您可以根据姓名、电话号码、帐号或客户号码搜索客户。然后,我查看了7个不同的数据库,试图在这些方面进行匹配,以返回结果。因此,我宁愿只运行一次搜索并记住结果,然后将其显示在页面中。下面是我用于搜索结果页面的ViewModelAsp.net mvc 3 MVC3在更改页面时保存搜索结果,asp.net-mvc-3,Asp.net Mvc 3,我有一个搜索页面,您可以根据姓名、电话号码、帐号或客户号码搜索客户。然后,我查看了7个不同的数据库,试图在这些方面进行匹配,以返回结果。因此,我宁愿只运行一次搜索并记住结果,然后将其显示在页面中。下面是我用于搜索结果页面的ViewModel public class SearchResultsViewModel { public IEnumerable<CustomerSearchResults> SearchResults { get; set; } public
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); }
}
}
res是控制器中的全局变量。我在想,也许我可以保存数据,以便在不同的页面上显示,但很快发现,每次我打开视图时,我都会得到一个新的控制器,所以这不起作用
视图代码只是在表中显示搜索结果,并且在底部有一个显示页码链接的HTML帮助程序。页码链接是使用正确页码调用SearchResults操作的锚
我可以保存数据以使用表单页到页,还是不可能?有更好的方法吗?如何缓存它,一个例子是通过可以将结果存储在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();
}
您可以对会话状态执行相同的操作,然后不必在每个操作结束时将其保存回去,但这会增加一些额外的开销,您必须确保在完成后将其清除,否则以后可能会出现一些令人不快的结果。只是需要注意一些事情。这个解决方案非常有效。我是一个网络编程的新手,所以我仍然在学习所有可用的机制。谢谢你的帮助。
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();
}