Asp.net mvc 3 MVC3在更改页面时保存搜索结果

Asp.net mvc 3 MVC3在更改页面时保存搜索结果,asp.net-mvc-3,Asp.net Mvc 3,我有一个搜索页面,您可以根据姓名、电话号码、帐号或客户号码搜索客户。然后,我查看了7个不同的数据库,试图在这些方面进行匹配,以返回结果。因此,我宁愿只运行一次搜索并记住结果,然后将其显示在页面中。下面是我用于搜索结果页面的ViewModel public class SearchResultsViewModel { public IEnumerable<CustomerSearchResults> SearchResults { get; set; } public

我有一个搜索页面,您可以根据姓名、电话号码、帐号或客户号码搜索客户。然后,我查看了7个不同的数据库,试图在这些方面进行匹配,以返回结果。因此,我宁愿只运行一次搜索并记住结果,然后将其显示在页面中。下面是我用于搜索结果页面的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); }
    }
}
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();
}