Я видел ViewBag
в MVC 3. Чем это отличается от ViewData
MVC 2?
.net
asp.net-mvc-3
difference
viewbag
viewdata
user469652
источник
источник
Внутренне свойства ViewBag хранятся в виде пар имя / значение в словаре ViewData .
Примечание: в большинстве предварительных версий MVC 3 свойство ViewBag называлось ViewModel, как отмечено в этом фрагменте из примечаний к выпуску MVC 3:
(отредактировано 10-8-12) Было предложено опубликовать источник этой информации, которую я разместил, вот источник: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4
источник
ViewData
аViewBag
, а не оViewModel
.dynamic
и поддерживаетViewBag.Message
. Один использует старыйViewData["Message"]
синтаксис.ViewBag против ViewData в MVC
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
Сходства между ViewBag и ViewData:
Разница между ViewBag и ViewData:
Пример ViewBag & ViewData:
Звонок в представлении
источник
typecasting
но вы не показали, как выполняется приведение типовViewData
Требуется приведение типов для сложных типов данных и проверка нулевых значений во избежание ошибок.ViewBag
: Не требует приведения типов для сложных типов данных.Рассмотрим следующий пример:
И код для
View
выглядит следующим образом:источник
<h4>@ViewBag.emp.Name</h4>
должно измениться на<h4>@ViewBag.Employee.Name</h4>
Все ответы свидетельствуют о том , что
ViewBag
и / илиViewData
является передача данныхController
вViews
которой дезинформация. и то, и другое очень полезно для передачи данных из Views в Layout или Partial to Views (или ViewComponents и т. д.). Это не только для контроллера.как образец asp.net по умолчанию, это на странице макета:
и в любом взгляде
Итак, чтобы задать вопрос: «В чем разница между
ViewBag
иViewData
?»Наиболее заметным отличием является
ViewData
словарь со строгой типизацией, в то времяViewBag
как это динамический тип.Обратите внимание, что данные внутри одинаковы
Когда использовать тот или иной?
ViewBag
не поддерживает недопустимые имена C #. вы не можете получить доступViewData["Key With Space"]
сViewBag
ViewBag.Something
является динамическим, и у вас могут возникнуть проблемы при вызове методов (например, методов расширения), которым необходимо знать точный параметр во время компиляции.ViewBag
Можно проверить на null синтаксический очиститель:ViewBag.Person?.Name
ViewData
иметь все свойства словаря, напримерContainsKey
,Add
и т. д., чтобы вы могли использовать его,ViewData.Add("somekey", "somevalue")
имейте в виду, что он может выдавать исключения.ViewData
on view требует TypeCasting, аViewBag
не.Зная тонкие различия, использование того или другого - гораздо больше вкусовых предпочтений.
Обычно вы можете придумать
ViewBag.AnyKey
псевдонимViewData["AnyKey"]
источник
Могу ли я рекомендовать вам также не использовать?
Если вы хотите «отправить» данные на экран, отправьте строго типизированный объект (AKA ViewModel), потому что его проще тестировать.
Если вы привязываетесь к какому-либо типу «Модель» и имеете случайные элементы «viewbag» или «viewdata», то это делает автоматизированное тестирование очень трудным.
Если вы используете их, подумайте, как вы можете реструктурировать и просто использовать ViewModels.
источник
Есть некоторые тонкие различия, которые означают, что вы можете использовать ViewData и ViewBag немного иначе, чем представление. Одно из преимуществ изложено в этом посте http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx и показывает, что кастинг можно избежать в примере, используя ViewBag вместо ViewData.
источник
viewdata: словарь, используемый для хранения данных между View и контроллером, вам нужно привести объект данных view к его соответствующей модели в представлении, чтобы иметь возможность извлекать данные из него ...
ViewBag: это динамическое свойство, схожее по своей работе с данными представления, однако лучше, потому что его не нужно приводить к соответствующей модели перед использованием его в представлении ...
источник
Ниже приведено различие между ViewData, ViewBag, TempData & Session. Credit / coped askforprogram.in , перейдите по ссылке для примера кода, который я не упомянул здесь.
ViewData в MVC
ViewBag в MVC
TempData в MVC
Сессия в MVC
источник
Хотя у вас может не быть технического преимущества при выборе одного формата над другим, вы должны знать о некоторых важных различиях между двумя синтаксисами. Одно очевидное отличие состоит в том, что ViewBag работает только тогда, когда ключ, к которому вы обращаетесь, является действительным идентификатором C #. Например, если вы поместите значение в ViewData ["Key With Spaces"], вы не сможете получить доступ к этому значению с помощью ViewBag, потому что код не будет компилироваться. Другой ключевой вопрос, который следует учитывать, - это то, что вы не можете передавать динамические значения в качестве параметров в методы расширения. Компилятор C # должен знать реальный тип каждого параметра во время компиляции, чтобы выбрать правильный метод расширения. Если какой-либо параметр является динамическим, компиляция не удастся. Например, этот код всегда завершится ошибкой: @ Html.TextBox («имя», ViewBag.Name). Чтобы обойти это, используйте ViewData ["Name"
источник
источник
Таким образом, мы можем заставить его использовать значения для передачи информации между контроллером на другую страницу с TEMP DATA
источник
Одно основное отличие, которое я заметил между ViewData и ViewBag:
ViewData: он будет возвращать объект независимо от того, что вы в него назначили, и вам нужно будет снова привести тип к исходному типу
ViewBag: он достаточно умен, чтобы возвращать точный тип, который вы ему присвоили, не имеет значения, назначен ли вам простой тип (например, int, string и т. Д.) Или сложный тип.
Пример: код контроллера.
Посмотреть код.
Выходной экран.
источник
Просмотр данных
http://www.gurujipoint.com/2017/09/view-data-viewbag-and-tempdata.html
источник
- ViewData используется для передачи данных из контроллера для просмотра
- Он является производным от класса ViewDataDictionary
- Доступно только для текущего запроса
- Требуется приведение типов для сложного типа данных и проверка на нулевые значения, чтобы избежать ошибок
- Если происходит перенаправление, его значение становится нулевым
ViewBagисточник
Здесь и ViewData, и ViewBag используются для передачи данных из Controller в View .
1. ViewData
- ViewData - объект словаря, производный от класса ViewDataDictonary .
- Данные допускают только один запрос, значения ViewData очищаются при перенаправлении страницы.
- Значение ViewData должно быть напечатано cate перед использованием.
Пример: в контроллере
Ввиду
- ViewData - это пара, такая как Key и Value , Message - это Key, а в кавычках значение - Value.
- Данные просты, поэтому мы не можем использовать здесь приведение типов, если данные сложны, тогда используется приведение типов.
- В View данные могут быть извлечены как
2. ViewBag
--ViewBag использует динамическую особенность. Оболочка ViewBag вокруг ViewData.
- В ViewBag тип приведения не требуется.
- То же, что и ViewData, если происходит перенаправление, значение становится нулевым.
Пример:
Ввиду
- Для сложного типа используйте ViewBag
- В View данные могут быть извлечены как
- главное различие заключается в том, что ViewBag не требует приведения типов, но ViewData требует приведения типов.
источник
ViewBag и ViewData - это два средства, которые используются для передачи информации от контроллера для просмотра в ASP.Net MVC. Цель использования обоих механизмов - обеспечить связь между контроллером и View. Оба имеют короткую жизнь, то есть значение обоих становится нулевым, как только происходит перенаправление, т. Е. После перенаправления страницы с исходной страницы (где мы устанавливаем значение ViewBag или ViewData) на целевую страницу, как ViewBag, так и ViewData становится нулевым
Несмотря на то, что эти сходства (ViewBag и ViewData) являются двумя разными вещами, если говорить о реализации обоих. Различия заключаются в следующем:
1.) Если мы проанализируем оба варианта реализации, то обнаружим, что ViewData - это структура данных словаря - Словарь объектов, производный от ViewDataDictionary и доступный с использованием строк в качестве ключей для этих значений, тогда как ViewBag использует динамические функции, представленные в C # 4.0, и это динамическое свойство.
2.) Получая доступ к значениям из ViewData, нам нужно типизировать значения (типы данных), поскольку они хранятся в виде объектов в словаре ViewData, но такой необходимости нет, если мы обращаемся к этому значению в случае ViewBag.
3.) В ViewBag мы можем установить значение следующим образом:
и может получить доступ следующим образом:
В то время как в случае ViewData значения могут быть установлены и доступны следующим образом: Настройка ViewData следующим образом:
и доступ к значению, как это
Для более подробной информации нажмите здесь:
источник