Должны ли строго типизированные частичные представления на одной странице в asp.net mvc-2 иметь одну модель комбинированного представления? - PullRequest
3 голосов
/ 25 мая 2010

У меня есть вопрос о строго типизированных частичных представлениях asp.net mvc-2 и моделях представления.

Мне просто интересно, могу ли я (или должен) иметь два строго типизированных частичных представления на одной странице, без реализации совершенно новой модели представления для этой страницы.

Например, у меня есть страница, которая отображает профили, но также имеет встроенную форму для добавления быстрого контакта. Каждый из этих объектов уже имеет свою собственную модель представления, то есть у меня есть ProfileViewModel и ContactViewModel.

Так что моему представлению нужны два строго типизированных частичных представления, одно с использованием IEnumerable List из ProfileViewModels, а другое с использованием ContactViewModel. Можно или желательно избегать создания третьей модели представления, IndexViewModel для этой страницы, которая содержит список ProfileViewModels и ContactViewModel? Не является ли реализация этой модели представления плохой практикой или более аккуратной, так как это приводит к уменьшению количества моделей представления?

Спасибо!

1 Ответ

1 голос
/ 25 мая 2010

Если для обоих частичных представлений требуются уже определенные модели представлений, то страница, на которой размещены эти частичные представления, должна каким-либо образом предоставлять модели представлений. Легко представить, как IEnumerable<ProfileViewModel> должен быть предоставлен на страницу, содержащую информацию, так как контактная информация, вероятно, поступает из серверной части. ContactViewModel содержит какие-либо данные? Если нет, возможно, вы сможете создать его на месте в представлении содержащей страницы и избежать передачи только IEnumerable<ProfileViewModel>.

В противном случае содержащее представление должно получить как IEnumerable<ProfileViewModel>, так и ContactViewModel. Вариант, к которому я бы склонялся, - это действительно определение новой модели представления, в которой есть элементы данных для этих двух значений. Это несколько лучше задокументировано и позволяет лучше проверять тип компилятора, чем альтернатива передачи этих значений через ViewData[].

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

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

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