2012-02-28 54 views
1

我有一個搜索頁面,您可以根據名稱,電話號碼,帳號或客戶號碼搜索客戶。然後,我查看7個不同的數據庫,嘗試在這些事情上進行匹配以取得結果。因此,我寧願只運行一次搜索,記住我可以在頁面中顯示的結果。以下是我用於SearchResults頁面的ViewModel。MVC3在更換頁面時保存搜索結果

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); } 
    } 
} 

下面是SearchResult所頁

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

可以存儲在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(); 
} 

你可以做同樣的事情會話狀態,然後你不必把它救回來,在每一個動作結束,但你必須與一些額外的開銷,你必須確保獲得完成後擺脫它,或者稍後可能會有一些時髦的結果。只是需要注意的一些事情。

+0

該解決方案效果很好。當談到web programmign時,我是一個相對的新手,所以我仍然學習所有可用的機制。謝謝您的幫助。 – 2012-02-28 17:13:51