2011-05-10 69 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”属性