DIFERENCIAS ENTRE   VIEWDATA, VIEWBAG, TEMPDATA, SESSION

 

                                                                              INTRODUCCIÓN

Este post generalmente está dedicado a resolver las dudas sobre las diferencias entre VIEWDATA, VIEWBAG, TEMPDATA, SESSION en Asp.net MVC sus definiciones y sus puntos importantes lo cual nos da la respuesta a cómo y cuáles son las formas de pasar los datos de controladores a las vistas o de un punto a otro punto.

  • QUE ES VIEWDATA
  • QUE ES VIEWBAG
  • QUE ES TEMPDATA
  • QUE ES SESSION
  • PREGUNTAS CUESTIONADAS
  • ViewData: Es un diccionario key/value, unos de sus puntos importantes son:
  • se utiliza para pasar datos desde el controlador hacia las vistas.
  • almacenar cualquier tipo de dato, pero a la hora de recuperar el dato no tiene tipo, tenemos que realizar conversiones(casting).
  • ViewData trabaja como framework arriba de 3.5
  • ViewData es más rápido que ViewBag
  • Sintaxis: ViewData[“value”]=Values;
  • Viewbag: Es la versión mejorada de ViewData, sus puntos importantes son:
  • Se utiliza para pasar datos desde el controlador hacia las vistas.
  • No es necesario usar casting.
  • ViewBag trabaja como framework arriba de 4.0
  • ViewBag es más lento que ViewData
  • Sintaxis: ViewBag. Value=Values;
  • Tempdata: Deriva de la clase TempDataDictionary, sus puntos importantes son:
  • Es usada para pasar datos de controlador a controlador o de una acción a otra acción.
  • expirará automáticamente el valor de TempData, es decir que cualquier dato que ponga en TempData se desecha después de la siguiente solicitud completa.
  • Similar a un almacén temporal en el que podemos guardar datos desde una acción y consultarlos desde otra.
  • Necesita casting.
  • sintaxis: TempData[“value”]=values;
  • Sesssion:
  • Es usada para pasar datos de controlador a controlador, vista a controlador y de controlador a vista
  • Sesión es capaz de almacenar datos mucho más largo tiempo, hasta que la sesión del usuario no está caduca.
  • Necesita casting.
  • Sesión es válido para distintos pedidos y no una simple redirección
  • sintaxis: Session[“value”]=values;

DESARROLLO DE  PRACTICA 

  • En la carpeta Controllers creamos un controller llamado ViewBagcontroller y ViewData
  • En la carpeta Views creamos una carpeta llamada ViewBag con un Index

 

CREAR   ViewBagController y ViewData

  • En la carpeta controllers creamos ViewBagController y ViewDataController

 

1

 

  • Le damos nombre al controller

2

  • Añadimos nombre que queramos dejando la palabra Controller

3

  • Creamos en las carpetas Views las dos zonas ViewBag y ViewData

4

Nota: La carpeta creada en Views Debe coincidir el mismo nombre que el controlador + controller.

5

 

  • Dentro de esas carpetas crearemos las vistas Index cada una en su zona correspondiente como se puede apreciar en la imagen anterior

6

 ViewData

Ahora realizamos en ViewData el código en el controlador para que su contenido sea mandado a la zona o carpeta en Views llamada ViewData en su caso.

namespace Tutorial.Controllers
{
public class ViewDataController : Controller
{
// GET: ViewData
public ActionResult Index()
{

ViewData[“Name”] = “LUIS”;

return View();
}
}
}

  • Ahora en la carpeta ViewData en Index ubicada en Views  vamos a recuperar lo guardado en ViewData y pintarlo

@{
ViewBag.Title = “Index”;
}

IndexViewData

@ViewData[“Name”]

 

 

  • Ahora podemos darle a ejecutar en Index y podremos ver que se verá en vista lo que guardamos en ViewData en mi caso yo guarde mi nombre  “LUIS”

7

 

    ViewBag

 

  • Una vez visto el ejemplo el anterior realizo de la misma manera, pero con ViewBag y se podrá ver la diferencia entre ellas realizo el código en un controlador ya creado llamado ViewBagController.

namespace Tutorial.Controllers
{
public class ViewBagController : Controller
{
// GET: ViewBag
public ActionResult Index()
{

ViewBag.Name = “ayllon”;
return View();
}
}
}

 

Y en Views en la carpeta ViewBag en Index también vamos recuperar el valor de ViewBag de ViewBagController y realizo el siguiente código Como podemos ver el uso de ViewBag nos proporciona un código mucho más simple.

@{
ViewBag.Title = “Index”;
}

IndexViewBag

@ViewBag.Name
8

TempData y Session en controller creamos un controlller llamado PracticeController para poder ver las diferencias en estos pero como con TempData y Session tiene la opción de mandar los datos de un controller a otro controller o de una vista a otra, en este caso la redirección será del ActionResult Index() al  ActionResult About()

en este caso en RETURN usaremos el comando RedirectToAction y lo mandaremos al ActionResult About() y este ActionResult About()devolverá en  RETURN  una determinada vista llamada en nuestro caso Index.

namespace Tutorial.Controllers
{
public class PracticeController : Controller
{
// GET: Practice
public ActionResult Index()
{

TempData[“Mensaje”] = “transferiendo los datos con TEMPDATA”;

Session[“2Mensaje”] = “transferiendo los datos con SESSION”;

return RedirectToAction(“About”);
}
public ActionResult About()
{

var mensajefromIndex = TempData[“Mensaje”];

var session = Session[“2Mensaje”];

return View(“Index”);
}

}
}
9

 

Una vez realizado el código a controller vamos a pintar en la carpeta Practice en la vista Index

 

@{

ViewBag.Title = “Index”;

}

<h2>Index</h2>

<hr />

@if (TempData[“mensaje”] != null)

{

@TempData[“mensaje”].ToString();

}

<hr />

@Session[“2Mensaje”].ToString();
10

Y ejecutamos para ver la diferencia entre estos dos de momento

11

Como podemos apreciar los datos se recuperan en la vista Index de la carpeta Practice que el controller en su Index lo redirecciona a   About, la diferencia es que TempData una vez leída su información desaparecerá, pero Session persistirá podemos comprobarlo dándole al actualizar y Tempdata ya su contenido desaparecerá.
12

 

 

 

FINALIZACION   Este post nos ayuda a poder  diferencias los comportamientos de ViewData,ViewBag,TempData,Session

realizando una pequeña práctica,en función de cada práctica se necesita uno  u otro ya  que  individualmente de cada uno tiene sus límites o NO a la hora de alcanzar el objetivo.

 

 

 

Descripción: Principales diferencias entre ViewData,ViewBag,TempData,Session                                                                                     Autor: Luis Alejandro Ayllon Herrera
Curso: Microsoft MCSD Web Applications + SharePoint Apps
Centro: Tajamar
Año académico: 2016-2017