2009-09-09 2 views
3

У меня есть вопрос относительно сохранения контроллера и просмотра отдельно. Мне кажется, что контроллер должен только передать модель в представление, и представление решает, как отображать модель. Таким образом, контроллер и модель остаются отдельными и могут быть независимо разработаны. Тем не менее, многие обучающие программы, которые я вижу в Интернете и даже в книге Pro ASP.NET MVC Framework, я вижу много примеров, используя либо ViewData ["string"], либо TempData ["string"].Хранение контроллера и просмотр отдельно с использованием сильно типизированных объектов

Разве это не создает две проблемы? Первый заключается в том, что представление теперь несколько связано с контроллером, поскольку оно должно знать имя строк, которые контроллер устанавливает в ViewData/TempData. Во-вторых, они слабо напечатаны, что означает, что нет Intellisense. Если бы я разрабатывал контроллер, я не мог бы просто сказать другому разработчику, работающему над представлением, просто использовать Intellisense для модели, я должен был бы дать ему имя строк, и если я когда-нибудь изменю имена строк, я Также необходимо изменить его в представлении.

Я думаю, что в конечном счете то, о чем я прошу, это правильно? Или я что-то не понимаю?

ответ

4

View Данные являются одним из способов передачи информации между представлением и контроллером, но, как вы сказали, нет никакого размытия, и это увеличивает сцепление. Вместо этого вам следует рассмотреть возможность использования ViewModel. См. Scott Gu NerdDinner example (свободно доступно) о способе использования ViewModel и о преимуществах и недостатках ViewDate vs ViewModel.

Надеюсь, это поможет.

+1

Спасибо за ответ! Все вы, ребята, в основном говорили то же самое, но, к сожалению, я могу отметить только один ответ, поэтому я дал его парню с самым низким рейтингом репутации. –

+0

Большое спасибо новичка! –

1

Да, вы правы, считается лучшей практикой создания класса, который часто называется ViewModel, который отправляется/используется в представлении. ViewModel обычно содержит модель, а также любые другие данные, которые могут иметь представление, например номер страницы для просмотра с разбивкой по страницам, или значения для списка для отображения.

2

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

Как я сделать это примерно на этой основе article by Jimmy Bogard:

  • Все виды сильно типизированных
  • Один конкретный класс ViewModel за просмотр
  • The View определяет, какие данные в ViewModel

Я не использую Auto-Mapper, как он это делает. Обычно я использую метод утилиты для преобразования объекта Model в соответствующий объект ViewModel.

Смежные вопросы