Jak działa ASP.NET MVC ViewBag
? MSDN mówi, że to tylko jeden Object
, co mnie intryguje, jak faktycznie działają właściwości „magiczne”, takie jak ViewBag.Foo
i magiczne struny ViewBag["Hello"]
?
Ponadto, jak mogę je utworzyć i używać w mojej aplikacji ASP.NET WebForms?
Przykłady byłyby naprawdę mile widziane!
asp.net
asp.net-mvc
viewbag
Aniket Inge
źródło
źródło
Odpowiedzi:
ViewBag
jest typu,dynamic
ale jest wewnętrznieSystem.Dynamic.ExpandoObject()
Jest to deklarowane w następujący sposób:
dynamic ViewBag = new System.Dynamic.ExpandoObject();
dlatego możesz:
ViewBag.Foo = "Bar";
Przykładowy kod obiektu ekspandera:
źródło
public object ViewBag { get; }
na stronie MSDN dla ViewBag jest napisane , ale kupuję twoje twierdzenie, że jest to plikExpandoObject
. Podoba mi się tutaj porównanie z ViewData : „ Więc w zasadzie [ViewBag] zastępuje magiczne ciągi [w ViewData]… magicznymi właściwościami ”. ; ^)public object ViewBag { get; }
na MSDN jest napisane , Code mówi, żedynamic ViewBag { get ..
wewnętrznie jest typu DynamicViewDataJest to obiekt dynamiczny, co oznacza, że możesz dodawać do niego właściwości w kontrolerze i odczytywać je później w widoku, ponieważ zasadniczo tworzysz obiekt tak jak to robisz, cechę typu dynamicznego. Zobacz ten artykuł MSDN dotyczący dynamiki. Zobacz ten artykuł na temat jego użycia w odniesieniu do MVC.
Jeśli chcesz użyć tego dla formularzy internetowych, dodaj właściwość dynamiczną do klasy strony bazowej, tak jak poniżej:
Niech wszystkie Twoje strony to dziedziczą. W znacznikach ASP.NET powinno być możliwe wykonanie:
To powinno działać. Jeśli nie, są sposoby na obejście tego problemu.
źródło
ViewBag
JestSystem.Dynamic.ExpandoObject
jako sugerowane. Właściwości wViewBag
są zasadniczoKeyValue
parami, w których uzyskuje się dostęp do wartości za pomocą klucza. W tym sensie są one równoważne:źródło
ViewBag służy do przekazywania danych z akcji kontrolera w celu wyświetlenia w celu renderowania przekazywanych danych. Teraz możesz przekazywać dane za pomocą między akcją kontrolera a widokiem przy użyciu ViewBag lub ViewData. ViewBag: Jest to typ obiektu Dynamic, co oznacza, że możesz dynamicznie dodawać nowe pola do widoku i uzyskiwać dostęp do tych pól w widoku. Podczas tworzenia nowych pól musisz zainicjować obiekt Viewbag.
np .: 1. Tworzenie ViewBag: ViewBag.FirstName = "John";
źródło
ViewBag jest typu Dynamic. Więcej, nie możesz zrobić
ViewBag["Foo"]
. Pojawi się wyjątek - nie można zastosować indeksowania z [] do wyrażenia typu „System.Dynamic.DynamicObject” .Wewnętrzna implementacja
ViewBag
faktycznie przechowuje Foo wViewData["Foo"]
(typ ViewDataDictionary), więc te 2 są wymienne.ViewData["Foo"]
iViewBag.Foo
.I zakres. ViewBag i ViewData służą do przekazywania danych między akcjami kontrolera i renderowaniem.
źródło
ViewBag to typ dynamiczny, który pozwala na dynamiczne ustawianie lub pobieranie wartości i pozwala na dodawanie dowolnej liczby dodatkowych pól bez silnie wpisanej klasy. Pozwalają one na przekazywanie danych z kontrolera do widoku. W sterowniku ......
Z uwagi
Nauczyłem się, że oba powinny mieć właściwość zapisywania nazwy dynamicznej, tj. ViewBag.victor
źródło
źródło