2013-10-11 11 views
4

В идеальном «мире привет» следует пройти строго типизированный модель назад к вид.Что такое точка зрения ViewBag?

return View(MyModel); 

Если вещи становятся липкими, мы можем создать

ViewModel

return View(MyViewModel); 

отл.

MyViewModel

  1. MyModel
  2. Foo

я могу избежать создания всей ViewModel

и использовать ViewBag частично.

ViewBag.Foo = Foo; 
return View(MyModel); 

Я понимаю, что потеряет часть сильно типизированных функциональность

(напр. Intellisense)

на мой взгляд, для этого ViewBag.

Является ли этот подход неаккуратным? против чего стоит MVC?

Если да, то на самом деле точка ViewBag?

+1

Это для вещей, которые вы забыли поставить в своей модели;;) –

ответ

4

Самый полезный случай использования, о котором я знаю, - это данные вне полосы, такие как сообщение, которое может отображаться на каждой странице. Фильтр действий может добавить это сообщение в ViewBag условно. Вероятно, вы не хотите изменять каждый класс модели представления, чтобы сохранить это несвязанное сообщение, потому что это может быть сквозной проблемой. Примером такого сообщения/виджета были бы сообщения об отключении переполнения стека.

Я не рекомендую использовать ViewBag вместо модели. Подход класса модели имеет типичные статические типизирующие преимущества при небольшой стоимости написания класса.

+0

Очень интересно, теперь имеет смысл. Благодаря! – Pinch

+0

Я никогда не видел «переполнение стека» перед :) –

+0

Вы не помните, что знаменитый SO Outage в четверг Oc 10, который состоялся с 12: 02: 00: 01AM - 12: 02: 00: 02AM? @Murali – Pinch

1

Это хороший вопрос, лично я не думаю, что есть какой-то момент - все, что он делает, поощряет «ленивое» кодирование. dynamic объекты имеют свои применения, однако я не вижу ViewBag как один из них, я бы скорее использовал ViewData[]/ViewModel и получил там свою безопасность, особенно когда я знаю, с какими типами я имею дело с ,

+0

+1 для честного подхода – Pinch

+0

viewdata is not no more typesafe –

1

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

На мой взгляд, ViewBag служит одной цели: упростить и быстро дать демо-версию продукта ASP.NET MVC при написании минимального кода. Это не лучший способ структурировать код, но он продает продукт.

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