Eu vi o ViewBag
no MVC 3. Como isso é diferente do que ViewData
no MVC 2?
.net
asp.net-mvc-3
difference
viewbag
viewdata
user469652
fonte
fonte
ViewBag internamente propriedades do são armazenadas como pares de nome / valor no dicionário do ViewData .
Nota: na maioria das versões de pré-lançamento do MVC 3, a propriedade ViewBag foi nomeada ViewModel, conforme observado neste trecho das notas de versão do MVC 3:
(editado em 08-10-12) Foi sugerido que eu publicasse a fonte dessas informações que publiquei, aqui está a fonte: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4
fonte
ViewData
eViewBag
não sobreViewModel
.dynamic
e suportaViewBag.Message
. Um usa aViewData["Message"]
sintaxe antiga .ViewBag vs ViewData no MVC
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
Semelhanças entre ViewBag e ViewData:
Diferença entre ViewBag e ViewData:
Exemplo de ViewBag e ViewData:
Chamando no modo de exibição
fonte
typecasting
mas você não mostrar como typecasting é realizadaViewData
: Requer conversão de tipo para tipos de dados complexos e verifica valores nulos para evitar erros.ViewBag
: Não requer conversão de tipo para tipos de dados complexos.Considere o seguinte exemplo:
E o código para
View
é o seguinte:fonte
<h4>@ViewBag.emp.Name</h4>
deve mudar para<h4>@ViewBag.Employee.Name</h4>
Todas as respostas sugerem que
ViewBag
e / ouViewData
é para passar dados a partirController
deViews
que é desinformação. ambos são muito úteis para passar dados de Views para Layout ou Parciais para Views (ou ViewComponents, etc.) Não é exclusivo do controlador.como a amostra asp.net padrão, faça isso na página de layout:
e de qualquer forma
Então, perguntando: "qual é a diferença entre
ViewBag
eViewData
?"A diferença mais notável
ViewData
é um dicionário fortemente tipado, enquantoViewBag
é um tipo dinâmico.Observe que os dados dentro são os mesmos
Quando usar um ou outro?
ViewBag
não suporta nomes C # inválidos. você não pode acessarViewData["Key With Space"]
comViewBag
ViewBag.Something
é dinâmico e você pode ter problemas ao chamar métodos (como métodos de extensão) que precisam saber o parâmetro exato no momento da compilação.ViewBag
pode verificar a limpeza sintática nula:ViewBag.Person?.Name
ViewData
tenha todas as propriedades de um dicionário comoContainsKey
,Add
etc., para que você possaViewData.Add("somekey", "somevalue")
ter em mente que isso pode gerar exceções.ViewData
de visualizações precisa TypeCasting, enquantoViewBag
não.Conhecer as diferenças sutis, usar uma ou outra é muito mais uma preferência de sabor.
Normalmente você pode pensar
ViewBag.AnyKey
em um apelido deViewData["AnyKey"]
fonte
Posso recomendar que você também não use?
Se você deseja "enviar" dados para a sua tela, envie um objeto fortemente tipado (AKA ViewModel), porque é mais fácil testar.
Se você vincular a algum tipo de "Modelo" e tiver itens aleatórios "viewbag" ou "viewdata", isso tornará o teste automatizado muito difícil.
Se você os estiver usando, considere como poderá reestruturar e apenas usar o ViewModels.
fonte
Existem algumas diferenças sutis que significam que você pode usar o ViewData e o ViewBag de maneiras ligeiramente diferentes da exibição. Uma vantagem é destacada neste post http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx e mostra que a transmissão pode ser evitado no exemplo usando o ViewBag em vez de ViewData.
fonte
viewdata: é um dicionário usado para armazenar dados entre o View e o controller, você precisa converter o objeto de dados do view no seu modelo correspondente na view para poder recuperar dados dele ...
ViewBag: é uma propriedade dinâmica semelhante ao trabalho com os dados da visualização. No entanto, é melhor porque não precisa ser convertida em seu modelo correspondente antes de usá-la na visualização ...
fonte
Abaixo está a diferença ponto a ponto sobre ViewData, ViewBag, TempData & Session. Crédito / cópia askforprogram.in , Siga o link do exemplo de código que não mencionei aqui.
ViewData no MVC
ViewBag no MVC
TempData no MVC
Sessão no MVC
fonte
Embora você possa não ter uma vantagem técnica em escolher um formato em detrimento do outro, esteja ciente de algumas diferenças importantes entre as duas sintaxes. Uma diferença óbvia é que o ViewBag funciona apenas quando a chave que você está acessando é um identificador C # válido. Por exemplo, se você colocar um valor em ViewData ["Key With Spaces"], não poderá acessar esse valor usando o ViewBag porque o código não será compilado. Outra questão importante a considerar é que você não pode passar valores dinâmicos como parâmetros para métodos de extensão. O compilador C # deve conhecer o tipo real de cada parâmetro no momento da compilação para escolher o método de extensão correto. Se algum parâmetro for dinâmico, a compilação falhará. Por exemplo, esse código sempre falha: @ Html.TextBox ("name", ViewBag.Name). Para contornar isso, use ViewData ["Name"
fonte
fonte
Dessa forma, podemos fazer com que use os valores para passar as informações entre o controlador para outra página com TEMP DATA
fonte
Uma diferença principal que notei entre o ViewData e o ViewBag é:
ViewData: ele retornará o objeto, não importa o que você atribuiu a isso e precisará retornar novamente ao tipo original.
ViewBag: é inteligente o suficiente retornar o tipo exato do que você atribuiu a ele, não importa o tempo em que você tenha atribuído o tipo simples (por exemplo, int, string etc.) ou complexo.
Ex: código do controlador.
Ver código.
Tela de saída.
fonte
Ver dados
http://www.gurujipoint.com/2017/09/view-data-viewbag-and-tempdata.html
fonte
- ViewData é usado para passar dados do controlador para visualizar
- É derivado da classe ViewDataDictionary
- Está disponível apenas para a solicitação atual
- Requer conversão de tipo para dados complexos e verifica valores nulos para evitar erros
- Se o redirecionamento ocorrer, seu valor se tornará nulo
ViewBagfonte
Aqui, ViewData e ViewBag são usados para passar dados do Controller para o View .
1. ViewData
- ViewData é um objeto de dicionário derivado da classe ViewDataDictonary .
- Os dados permitem apenas uma solicitação, os valores do ViewData são limpos quando ocorre o redirecionamento da página.
- O valor ViewData deve ser digitado cate antes do uso.
Exemplo: No Controlador
Em vista
- Com ViewData é um par como Chave e Valor , Mensagem é Chave e no valor da vírgula invertida é Valor.
- Os dados são simples, portanto, não podemos usar a conversão de tipos aqui se os dados forem complexos, usando a conversão de tipos.
- Os dados do In View podem ser extraídos como
2. ViewBag
--O ViewBag usa o recurso dinâmico. O wrapper do ViewBag em torno do ViewData.
- No ViewBag, é necessária a conversão do tipo.
- Igual a ViewData, se o redirecionamento ocorrer, o valor se tornará nulo.
Exemplo:
Em vista
--Para o tipo complexo, use o ViewBag
- Os dados do In View podem ser extraídos como
- a principal diferença é que o ViewBag não exige a conversão de texto, mas o ViewData é necessário a conversão de texto .
fonte
ViewBag e ViewData são dois meios que são usados para passar informações do controlador para exibição no ASP.Net MVC. O objetivo do uso de ambos os mecanismos é fornecer a comunicação entre o controlador e o View. Ambos têm vida curta, que é o valor de ambos se torna nulo quando o redirecionamento ocorre, ou seja, quando a página é redirecionada da página de origem (onde definimos o valor de ViewBag ou ViewData) para a página de destino, tanto o ViewBag quanto o ViewData torna-se nulo.
Apesar de ter essas semelhanças, ambos (ViewBag e ViewData) são duas coisas diferentes, se falarmos sobre a implementação de ambos. As diferenças são as seguintes:
1.) Se analisarmos ambas as implementações, descobriremos que o ViewData é uma estrutura de dados do dicionário - Dicionário de Objetos derivada do ViewDataDictionary e acessível usando cadeias de caracteres como Chaves para esses valores, enquanto o ViewBag faz uso dos recursos dinâmicos introduzidos no C # 4.0 e é uma propriedade dinâmica.
2.) Ao acessar os valores do ViewData, precisamos digitar os valores (tipos de dados), pois eles são armazenados como Objetos no dicionário do ViewData, mas não existe tal necessidade se estivermos acessando o valor no caso do ViewBag.
3.) No ViewBag, podemos definir o valor assim:
e pode acessar da seguinte maneira:
Enquanto no caso de ViewData, os valores podem ser definidos e acessados da seguinte maneira: Configurando ViewData da seguinte maneira:
e acessando valor como este
Para mais detalhes clique aqui:
fonte