我有一个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
Thanks @Adam。我试图用3个属性创建新的NewViewModel。第一个是'MyOriginalViewModel(我用来检索搜索查询)',第二个''PaginatedList(检索分页)',第三个'DBItems(包含所有记录)'。所以,而不是做返回'查看(paginatedSearchResult)',我做返回'查看(NewViewModel)',以及我的查看页面中的以下内容。 '@model IEnumerable'。但我得到编译错误“传入字典的模型项目类型为'NewViewModel',但需要一个'Sys.Coll.Generic.IEnumerable'类型的模型项目” 。 –
ACS
2011-05-10 23:04:31
由于列表位于视图模型中,因此您返回的不是列表中的单个对象。删除ienumerable <>然后使用@model App.ViewModel.NewViewModel – 2011-05-11 04:14:04
好吧,如果我删除了IEnumerable表单视图页面,我无法遍历我的记录集。当我这样做时,我得到警告“foreach语句无法对'App.ViewModel.NewViewModel'类型的变量进行操作,因为'App.ViewModel.NewViewModel'不包含'GetEnumerator'的公共定义。除了静态用户输入外,我还有很多记录要循环显示在查看页面中。谢谢! – ACS 2011-05-11 15:53:49