2011-05-10 19 views
4

我有一個MVC3 web應用程序,我需要實現數據庫搜索功能。我爲我的搜索表單創建ViewModel類,以便從View查看控制器的搜索參數。我能順利拿到我所有的搜索參數(包括搜索查詢和複選框,如果用戶想縮小搜索)在我的控制器類和使用存儲庫模式MVC3中ViewBag的替代方案

var searchResult = _repository.GetItems(searchParms, chkbox1, chkbox2, ..., chkbox10) 

在此之後從數據庫中檢索數據,我通過我的信息搜索結果到分頁助手像

var paginatedSearchResult = new PaginatedList<Items>(searchResult, page ?? 0, pageSize); 

我在我看來,頁面顯示檢索到的數據

return View(paginatedSearchResult) 

的問題,我面對的是,BES從數據庫中獲取數據,我還需要在我的查看頁面中顯示搜索查詢字符串和主題(爲其使用了複選框),以便用戶可以查看他們搜索的內容。我沒有找到任何適當的解決方案,並不得不使用ViewBag。現在我的Controller頁面看起來很醜,有10多個ViewBag。我知道必須有一些很好的解決方案,但我無法找到它。任何建議將不勝感激。

感謝, ACS

回答

2

你已經很近了。 您有用於搜索的ViewModel - 所以您顯然知道如何創建視圖模型。只需創建一個新的ViewModel,它將當前的ViewModel作爲屬性,將數據庫搜索視圖模型作爲屬性。

 
public class SearchViewModel 
{ 
    public YourExistingSearchOptionsViewModel SearchViewModel {get;set} 
    public PaginatedList SearchResults {get;set;} 
} 

顯然這是非常粗糙的 - 但希望你有想法。

+0

Thanks @Adam。我試圖用3個屬性創建新的NewViewModel。第一個是'MyOriginalViewModel(我用來檢索搜索查詢)',第二個''PaginatedList(檢索分頁)',第三個'DBItems(包含所有記錄)'。所以,而不是做返回'查看(paginatedSearchResult)',我做返回'查看(NewViewModel)',以及我的查看頁面中的以下內容。 '@model IEnumerable '。但我得到編譯錯誤「傳入字典的模型項目類型爲'NewViewModel',但需要一個'Sys.Coll.Generic.IEnumerable'類型的模型項目」 。 – ACS 2011-05-10 23:04:31

+0

由於列表位於視圖模型中,因此您返回的不是列表中的單個對象。刪除ienumerable <>然後使用@model App.ViewModel.NewViewModel – 2011-05-11 04:14:04

+0

好吧,如果我刪除了IEnumerable表單視圖頁面,我無法遍歷我的記錄集。當我這樣做時,我得到警告「foreach語句無法對'App.ViewModel.NewViewModel'類型的變量進行操作,因爲'App.ViewModel.NewViewModel'不包含'GetEnumerator'的公共定義。除了靜態用戶輸入外,我還有很多記錄要循環顯示在查看頁面中。謝謝! – ACS 2011-05-11 15:53:49

0

我想你可能會搜索的強類型「的ViewData」屬性