Когда использовать ViewBag, ViewData или TempData в Mvc3 - PullRequest
12 голосов
/ 08 ноября 2011

Когда использовать ViewBag, ViewData или TempData в представлении.В контроллере я хочу отправить объект в представление. Я хочу знать, что будет лучше в этом случае.Я хочу, чтобы объект на странице просмотра.

Ответы [ 2 ]

33 голосов
/ 08 ноября 2011

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

TempData["myInfo"] = "my info";

Затем в следующем запросе он будет там ... но после этого пропадет.

Используйте ViewBag для того, чтобы большая часть ваших дополнительных данных была передана вашему представлению, кроме @ model

ViewBag.MyInfo = "my info";

Затем получите доступ к нему из своего представления.

Используйте ViewData для доступа/ введите точно такую ​​же информацию, что и ViewBag, за исключением коллекции вместо свойств динамического объекта.

ViewData["MyInfo"]

обращается к точно таким же данным, что и ViewBag.MyInfo

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

Еще одна вещь, на которую следует обратить внимание: TempData и ViewData - это словари, в которых хранятся значения объектов, поэтому при их использовании вы должны приводить их к их исходному типу.Однако ViewBag использует динамический, и вам не всегда нужно приводить его, так как это делается во время выполнения.Некоторые методы (например, методы Extension) не могут обрабатывать динамические данные, поэтому вам придется приводить их в таких случаях.

23 голосов
/ 08 ноября 2011

ИМХО для приличных дизайнерских практик -

ViewBag = никогда.ViewData = никогда.Это волшебные поля, основанные на строковых значениях, и они не могут быть перехвачены во время любых экземпляров времени компиляции.

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

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