Как работает ASP.NET MVC ViewBag
? MSDN говорит, что это просто Object
, что меня заинтриговало, как на самом деле работают «волшебные» свойства, такие как ViewBag.Foo
магические строки ViewBag["Hello"]
?
Кроме того, как я могу его создать и использовать в своем приложении ASP.NET WebForms?
Были бы очень признательны за примеры!
asp.net
asp.net-mvc
viewbag
Аникет Инге
источник
источник
Ответы:
ViewBag
относится к типу,dynamic
но внутреннеSystem.Dynamic.ExpandoObject()
Заявлено это так:
dynamic ViewBag = new System.Dynamic.ExpandoObject();
вот почему вы можете:
ViewBag.Foo = "Bar";
Пример кода объекта расширителя:
источник
public object ViewBag { get; }
на странице MSDN для ViewBag , но я покупаю ваши претензии , что это . Мне нравится сравнение с ViewData здесь : « Итак, в основном [ViewBag] заменяет магические строки [в ViewData] ... магическими свойствами ». ; ^)ExpandoObject
public object ViewBag { get; }
в MSDN написано,dynamic ViewBag { get ..
что код говорит, что он внутренне относится к типу DynamicViewDataЭто динамический объект, то есть вы можете добавлять к нему свойства в контроллере и читать их позже в представлении, потому что вы, по сути, создаете объект так же, как и вы, особенность динамического типа. См. Статью MSDN о динамике. См. Эту статью о его использовании в отношении MVC.
Если вы хотите использовать это для веб-форм, добавьте динамическое свойство в класс базовой страницы следующим образом:
Все ваши страницы унаследовали от этого. В разметке ASP.NET вы должны иметь возможность:
Это должно сработать. Если нет, есть способы обойти это.
источник
ViewBag
ЯвляетсяSystem.Dynamic.ExpandoObject
как предложено. Свойства в, поViewBag
сути, представляют собойKeyValue
пары, где вы получаете доступ к значению по ключу. В этом смысле они эквивалентны:источник
ViewBag используется для передачи данных из действия контроллера в представление для отображения передаваемых данных. Теперь вы можете передавать данные, используя действие контроллера и представление, используя ViewBag или ViewData. ViewBag: это тип динамического объекта, что означает, что вы можете динамически добавлять новые поля в viewbag и получать доступ к этим полям в View. Вам необходимо инициализировать объект viewbag во время создания новых полей.
например: 1. Создание ViewBag: ViewBag.FirstName = "John";
источник
ViewBag имеет тип динамический. Больше вы не можете сделать
ViewBag["Foo"]
. Вы получите исключение - Невозможно применить индексирование с помощью [] к выражению типа 'System.Dynamic.DynamicObject' .Внутренняя реализация
ViewBag
фактически сохраняет Foo вViewData["Foo"]
(тип ViewDataDictionary), поэтому эти 2 взаимозаменяемы.ViewData["Foo"]
иViewBag.Foo
.И размах. ViewBag и ViewData предназначены для передачи данных между действиями контроллера и представлением, которое он отображает.
источник
ViewBag - это динамический тип, который позволяет вам динамически устанавливать или получать значения и позволяет добавлять любое количество дополнительных полей без строго типизированного класса. Они позволяют передавать данные из контроллера в представление. В контроллере ......
Ввиду
Я узнал, что оба должны иметь свойство динамического имени сохранения, то есть ViewBag.victor.
источник
источник