ASP .NET MVC - Conceitos : ViewData, ViewBag e TempData
Neste artigo vamos recordar alguns conceitos básicos e terminologias usadas na tecnologia ASP . NET MVC. Hoje veremos os conceitos relacionados a ViewData, ViewBag e TempData. |
Revisão de Conceitos - Teoria
Ao começar a usar a tecnologia ASP .NET MVC você vai encontrar muitas referências a ViewData, ViewBag e TempData e pode ficar confuso, pois existem similaridades e diferenças entre esses objetos.
O
ASP .NET MVC é uma implementação da
arquitetura MVC para o ASP .NET em um framework com o objetivo de criar
aplicações WEB no padrão MVC e fornecer uma alternativa ao modelo
WebForm do ASP .NET disponível até então. O framework ASP .NET MVC
fornece um ambiente robusto e leve que esta integrado aos recursos do
ASP .NET como master pages e membership sendo definido no namespace
System.Web.Mvc e apresenta os seguintes
componentes:
Models -
Os objetos Model (modelo) são as partes da aplicação que implementam a
lógica o domínio de dados da aplicação e retornam e armazenam o estado
do modelo em um banco de dados. |
Todos os três objetos estão disponíveis como propriedades de views e controllers e podemos dizer que eles tem um objetivo em comum:
Tanto ViewData, ViewBag e TempData tem como objetivo transportar pequenas quantidades de dados entre views ou de controllers para views.
Os objetos ViewData e ViewBag atuam bem nos seguintes cenários:
Já o objeto TempData trabalha bem em um único cenário:
Nota: Para trabalhar com uma maior quantidade de dados você deve usar o objeto ViewModel.
1- ViewData
Conceito : Os dados viajam do controlador para a view através de um dicionário ViewDataDictionary. Este ViewDataDictionary é uma classe dicionário que é chamada ViewData.
A propriedade dictionary ViewData pode ser usada para preencher os dados que você deseja passar para uma view
Exemplos:
C#
ViewData["mensagem"] = "Macoratti, quase tudo para Visual Basic";
ViewData["HoraAtual"] = DateTime.Now;
VB .NET
ViewData("mensagem") = "Macoratti, quase tudo para Visual Basic"
ViewData("HoraAtual") = DateTime.Now
|
2- ViewBag
ViewBag é apenas um invólucro dinâmico em torno de ViewData, sendo uma propriedade dinâmica baseada no recurso dynamic da plataforma .NET.
Com ViewBag você não precisa escrever a palavra-chave dynamic, ele usa a palavra-chave dynamic internamente.
Dessa forma, ViewBag pode ser vista como a biblioteca de dados dinâmico.
Exemplos:
C#
ViewBag.mensagem = "Macoratti, quase tudo para Visual Basic";
ViewData.HoraAtual = DateTime.Now;
VB .NET
ViewBag.mensagem = "Macoratti, quase tudo para Visual Basic"
ViewBag.HoraAtual = DateTime.Now
|
3- TempData
TempData ajuda na manutenção de dados quando você se move de um controlador para outro controlador. Para manter os dados ele utiliza uma variável de sessão (internamente).
TempData é semelhante a uma sessão de curta duração mas possui um tempo de vida maior que ViewBag e ViewData pois persiste desde a sua criação até ser chamado.
Exemplo:
[HttpPost]
public ActionResult gerarMatricula(Pessoa p)
{
// Meu objeto Aluno
var _aluno = new Aluno
{
Nome = p.Nome,
Email = p.Email
};
// Pertistindo os dados até o próximo requisição
TempData["Aluno"] = _aluno;
// Fazendo o Redirect entre Controllers
return RedirectToAction("gerarMatriculaAluno");
}
[HttpGet]
public ActionResult gerarMatriculaAluno()
{
// Verificando se aluno é nulo
if (TempData["Aluno"] != null)
{
// É obrigado a fazer a conversão entre tipos de dados
var _aluno = TempData["Aluno"] as Aluno;
}
return View();
}
}
|
Public Function gerarMatricula(p As Pessoa) As ActionResult ' Meu objeto Aluno Dim _aluno = New Aluno() With { _ .Nome = p.Nome, _ .Email = p.Email _ } ' Pertistindo os dados até o próximo requisição TempData("Aluno") = _aluno ' Fazendo o Redirect entre Controllers Return RedirectToAction("gerarMatriculaAluno") End Function
|
C# |
VB .NET |
Obs: Para manter os dados de um TempData após uma leitura podemos usar o método Keep(). Para remover os dados do TempData usamos o método Remove():
C#
// Para manter os dados de TempData até a próxima requisição
TempData.Keep("Aluno");
// Para remover os dados de TempData desta e da próxima requisição.
TempData.Remove("Aluno");
VB .NET 'Para manter os dados de TempData até a próxima requisição TempData.Keep("Aluno") 'Para remover os dados de TempData desta e da próxima requisição. TempData.Remove("Aluno") |
A seguir temos uma tabela que mostra a atuação dos objetos ViewBag, ViewData e TempData em vários cenários:
Manutenção de Dados | ViewData | ViewBag | TempData |
Controller para Controller | Não | Não | Sim |
Controller para View | Sim | Sim | Não |
View para Controller | Não | Não | Não |
Conclusão :
Os objetos ViewData e ViewBag fornecem maneiras de acessar pequenas porções de dados do seu modelo, principalmente entre Controller e Views, no entanto, para dados mais complexos, você pode usar o objeto ViewModel.
O objeto TempData, por outro lado, é voltado especificamente para trabalhar com dados entre redirecionamentos HTTP (Controller para Controller), por isso cuidado ao usar TempData.
Nenhum dos recursos oferece o recurso do Intellisense e por isso te sujeita a erros de digitação; por esse motivo, sempre que possível prefira usar o Model Binding e views tipadas.
Todavia digo-vos a verdade, que vos convém que eu vá; porque, se eu não for, o
Consolador não virá a vós; mas, quando eu for, vo-lo enviarei.
E, quando ele vier, convencerá o mundo do pecado, e da justiça e do juízo.
João 16:7-8
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: