Альтернатива для ViewBag в MVC3 - PullRequest
4 голосов
/ 10 мая 2011

У меня есть веб-приложение MVC3, где мне нужно реализовать функцию поиска в базе данных.Я создаю класс ViewModel для формы поиска, чтобы получить параметры поиска из View в контроллер.Я могу успешно получить все свои параметры поиска (включая поисковый запрос и флажки, если пользователь хочет сузить поиск) в моем классе контроллера и извлечь данные из базы данных, используя шаблон репозитория

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

После этого я передаюmy searchResult к помощнику по разбиению на страницы, например

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

Я отображаю полученные данные на странице просмотра

return View(paginatedSearchResult)

Проблема, с которой я сталкиваюсь, заключается в том, что помимо данных из базы данных ятакже необходимо показать строку поискового запроса и тему (для которой был установлен флажок) на странице просмотра, чтобы пользователь мог видеть то, что он искал.Я не нашел правильного решения для этого и пришлось использовать ViewBag.И теперь моя страница контроллера выглядит ужасно с более чем 10 ViewBag.Я знаю, что должно быть какое-то хорошее решение для этого, но я не могу его найти. Любые предложения будут высоко оценены.

Спасибо, ACS

Ответы [ 3 ]

3 голосов
/ 10 мая 2011

Прямой ответ на заголовок вопроса - альтернатива для viewbag в mvc - строго типизированные классы ViewModel. Взгляните на Создание моделей просмотра

2 голосов
/ 10 мая 2011

Ты оооочень близко уже. У вас есть ViewModel, которую вы используете для поиска - так что вы, очевидно, знаете, как создать модель представления. Просто создайте новую ViewModel, в которой ваша текущая ViewModel является свойством, а модель поиска в базе данных - свойством.

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

очевидно, что это очень грубо - но, надеюсь, вы поняли идею.

0 голосов
/ 10 мая 2011

Я думаю, вы можете искать строго типизированное свойство "ViewData"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...