Использование двух строго типизированных моделей для одного представления MVC

StackOverflow https://stackoverflow.com/questions/683153

  •  22-08-2019
  •  | 
  •  

Вопрос

Я упускаю что-то фундаментальное для принципов MVC или я схожу с ума?

Если у меня есть представление, которое отображает список книг и список авторов, я должен создать класс, который имел бы список книг и список авторов в качестве свойств.Верно?

Затем я бы строго ввел представление, чтобы использовать этот класс.

Теперь я хочу создать новую страницу с теми же объявлениями, но на которой также есть список рекламных акций.Нужно ли мне создать другой класс со свойством list of Books, свойством list of authors и свойством list of promotions?

Если я создаю классы для всех представлений, я создаю чертовски много дополнительной работы.Должен ли я создавать строго типизированные части для каждой из них?Что делать, если макет каждый раз отличается?

В настоящее время у меня есть класс BaseViewData, который используется всеми представлениями, поскольку он содержит некоторые общие свойства.Однако сейчас я изо всех сил пытаюсь вставить другие элементы без полного раздувания класса BaseViewData.

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

Это было полезно?

Решение

Я использую Методы расширения ViewData От MvcКонтриб это добавляет поддержку для нескольких строго типизированных моделей (при условии, что они разных типов).Код для добавления их в ViewData выглядит следующим образом:

User currentUser = GetCurrentUser();
List<Project> projectList = projectRepository.GetRecentProjects(currentUser);
ViewData.Add(user);
ViewData.Add(projectList);

Код в представлении для их извлечения выглядит следующим образом:

User user = ViewData.Get<User>();
List<Project> projectList = ViewData.Get<List<Project>>();

Это удаляет как "волшебные строки", так и приведение типов.Обратите внимание, это ничего не делает со свойством Model представления.

Другие советы

Создайте ОДИН класс контейнера для каждого объекта в вашей системе и используйте для всех представлений - просто

Объекты с нулевым значением не имеют реальных накладных расходов

Я столкнулся с той же проблемой.Я думаю, что общее решение для большинства людей - создать класс-контейнер, содержащий модели книг и авторов, которые вам действительно нужны, и передать этот контейнер вашему представлению.

Неоптимально, да, но это работает.Надеюсь, это будет рассмотрено в будущих версиях фреймворка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top