Como funciona o ASP.NET MVC ViewBag
? MSDN diz que é apenas um Object
, o que me intriga, como as propriedades "Magic", como ViewBag.Foo
e strings mágicas ViewBag["Hello"]
realmente funcionam?
Além disso, como posso fazer um e usá-lo em meu aplicativo ASP.NET WebForms?
Os exemplos seriam muito apreciados!
asp.net
asp.net-mvc
viewbag
Aniket Inge
fonte
fonte
Respostas:
ViewBag
é do tipodynamic
, mas internamente é umSystem.Dynamic.ExpandoObject()
É declarado assim:
dynamic ViewBag = new System.Dynamic.ExpandoObject();
é por isso que você pode fazer:
ViewBag.Foo = "Bar";
Um exemplo de código de objeto expansor:
fonte
public object ViewBag { get; }
na página do MSDN para ViewBag , mas estou acreditando que é umExpandoObject
. Eu gosto da comparação com ViewData aqui : " Então, basicamente [ViewBag] substitui strings mágicas [em ViewData] ... por propriedades mágicas ". ; ^)public object ViewBag { get; }
no MSDN, Code dizdynamic ViewBag { get ..
que internamente é do tipo DynamicViewDataÉ um objeto dinâmico, o que significa que você pode adicionar propriedades a ele no controlador e lê-las posteriormente na visualização, porque você está essencialmente criando o objeto enquanto o faz, um recurso do tipo dinâmico. Consulte este artigo do MSDN sobre dinâmica. Veja este artigo sobre seu uso em relação ao MVC.
Se você quiser usar isso para formulários da web, adicione uma propriedade dinâmica a uma classe de página base como:
Faça com que todas as suas páginas sejam herdadas disso. Você deve ser capaz de, em sua marcação ASP.NET, fazer:
Isso deve funcionar. Se não, existem maneiras de contornar isso.
fonte
O
ViewBag
é umSystem.Dynamic.ExpandoObject
conforme sugerido. As propriedades noViewBag
são essencialmenteKeyValue
pares, onde você acessa o valor pela chave. Nesse sentido, são equivalentes:fonte
ViewBag é usado para passar dados da Ação do Controlador para visualizar e renderizar os dados que estão sendo passados. Agora você pode passar dados usando entre Controller Action e View usando ViewBag ou ViewData. ViewBag: É um tipo de objeto Dinâmico, ou seja, você pode adicionar novos campos ao viewbag de forma dinâmica e acessar esses campos na Visualização. Você precisa inicializar o objeto de viewbag no momento de criar novos campos.
Ex: 1. Criando ViewBag: ViewBag.FirstName = "John";
fonte
ViewBag é do tipo dinâmico. Mais, você não pode fazer
ViewBag["Foo"]
. Você obterá uma exceção - não é possível aplicar indexação com [] a uma expressão do tipo 'System.Dynamic.DynamicObject' .A implementação interna de
ViewBag
realmente armazena Foo emViewData["Foo"]
(tipo de ViewDataDictionary), então esses 2 são intercambiáveis.ViewData["Foo"]
eViewBag.Foo
.E escopo. ViewBag e ViewData são para passar dados entre as Ações do Controlador e a Visualização que ele renderiza.
fonte
ViewBag é um tipo dinâmico que permite definir ou obter valores dinamicamente e adicionar qualquer número de campos adicionais sem uma classe fortemente tipada. Eles permitem que você passe dados do controlador para a visualização. No controlador ......
Em vista
O que aprendi é que ambos devem ter a propriedade salvar nome dinâmico, ou seja, ViewBag.victor
fonte
fonte