我有一个MVC3 Web应用程序,我需要实现数据库搜索功能。我正在为我的搜索表单创建一个ViewModel类,以便从View到控制器获取搜索参数。我可以在我的控制器类中成功获取所有搜索参数(包括搜索查询和复选框,如果用户想要缩小搜索范围)并使用存储库模式从数据库中检索数据
var searchResult = _repository.GetItems(searchParms, chkbox1, chkbox2, ..., chkbox10)
在此之后,我将我的searchResult传递给像
这样的分页助手var paginatedSearchResult = new PaginatedList<Items>(searchResult, page ?? 0, pageSize);
我在我的视图页面中显示检索到的数据
return View(paginatedSearchResult)
我面临的问题是,除了来自数据库的数据外,我还需要在我的视图页面中显示搜索查询字符串和主题(使用了复选框),以便用户可以看到他们搜索的内容。我没有找到任何适当的解决方案,不得不使用ViewBag。现在,我的Controller页面看起来很丑陋,有超过10个ViewBag。我知道必须有一些很好的解决方案,但我无法找到它。任何建议都将受到高度赞赏。
谢谢, ACS
答案 0 :(得分:3)
对问题标题的直接回答是 - mvc中viewbag的替代方法是强类型ViewModel类。看看Create View Models
答案 1 :(得分:2)
你已经太近了。 您有一个用于搜索的ViewModel - 因此您显然知道如何创建视图模型。只需创建一个新的ViewModel,它将您当前的ViewModel作为属性,并将数据库搜索视图模型作为属性。
public class SearchViewModel { public YourExistingSearchOptionsViewModel SearchViewModel {get;set} public PaginatedList SearchResults {get;set;} }
显然这是非常粗糙的 - 但希望你能在那里得到这个想法。
答案 2 :(得分:0)
我认为您可能正在搜索强类型的“ViewData”属性