vista varias usar una net mvc llamando entre diferencia crear como asp acciones asp.net-mvc-3

asp.net mvc 3 - varias - ViewBag, ViewData y TempData



view temp mvc (8)

1) TempData

Le permite almacenar datos que sobrevivirán para una redirección. Internamente utiliza la sesión como tienda de repostería, es solo que después de que se realiza la redirección, los datos se desalojan automáticamente. El patrón es el siguiente:

public ActionResult Foo() { // store something into the tempdata that will be available during a single redirect TempData["foo"] = "bar"; // you should always redirect if you store something into TempData to // a controller action that will consume this data return RedirectToAction("bar"); } public ActionResult Bar() { var foo = TempData["foo"]; ... }

2) ViewBag, ViewData

Le permite almacenar datos en una acción de controlador que se utilizará en la vista correspondiente. Esto supone que la acción devuelve una vista y no redirige. Vive solo durante la solicitud actual.

El patrón es el siguiente:

public ActionResult Foo() { ViewBag.Foo = "bar"; return View(); }

y en la vista:

@ViewBag.Foo

o con ViewData:

public ActionResult Foo() { ViewData["Foo"] = "bar"; return View(); }

y en la vista:

@ViewData["Foo"]

ViewBag es solo una envoltura dinámica alrededor de ViewData y existe solo en ASP.NET MVC 3.

Dicho esto, ninguno de esos dos constructos debería ser usado. Debe utilizar modelos de vista y vistas fuertemente tipadas. Así que el patrón correcto es el siguiente:

Ver modelo:

public class MyViewModel { public string Foo { get; set; } }

Acción:

public Action Foo() { var model = new MyViewModel { Foo = "bar" }; return View(model); }

Vista fuertemente tipada:

@model MyViewModel @Model.Foo

Después de esta breve introducción, respondamos tu pregunta:

Mi requisito es que quiero establecer un valor en uno de los controladores, que se redireccionará a ControllerTwo y Controller2 representará la vista.

public class OneController: Controller { public ActionResult Index() { TempData["foo"] = "bar"; return RedirectToAction("index", "two"); } } public class TwoController: Controller { public ActionResult Index() { var model = new MyViewModel { Foo = TempData["foo"] as string }; return View(model); } }

y la vista correspondiente ( ~/Views/Two/Index.cshtml ):

@model MyViewModel @Html.DisplayFor(x => x.Foo)

También hay inconvenientes de usar TempData: si el usuario pulsa F5 en la página de destino, los datos se perderán.

Personalmente no uso TempData tampoco. Es porque internamente utiliza Session y deshabilito la sesión en mis aplicaciones. Yo prefiero una forma más REST llena de lograr esto. Que es: en la primera acción del controlador que realiza la redirección, almacene el objeto en su almacén de datos y el usuario la identificación única generada al redireccionar. Luego, en la acción de destino, use este ID para recuperar el objeto inicialmente almacenado:

public class OneController: Controller { public ActionResult Index() { var id = Repository.SaveData("foo"); return RedirectToAction("index", "two", new { id = id }); } } public class TwoController: Controller { public ActionResult Index(string id) { var model = new MyViewModel { Foo = Repository.GetData(id) }; return View(model); } }

La vista se mantiene igual.

¿Podría algún cuerpo explicar, cuándo usar?

  1. TempData
  2. ViewBag
  3. Ver datos

Tengo un requisito, donde necesito establecer un valor en el controlador uno, el controlador redireccionará al Controlador Dos y el Controlador Dos representará la Vista.

He intentado usar ViewBag, el valor se pierde cuando llego al Controlador Dos.

¿Puedo saber cuándo usar y ventajas o desventajas?

Gracias


TempData

Básicamente es como un DataReader, una vez leído, los datos se perderán.

Mira este video

Ejemplo

public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = "Welcome to ASP.NET MVC!"; TempData["T"] = "T"; return RedirectToAction("About"); } public ActionResult About() { return RedirectToAction("Test1"); } public ActionResult Test1() { String str = TempData["T"]; //Output - T return View(); } }

Si presta atención al código anterior, RedirectToAction no tiene ningún impacto sobre los TempData hasta que se lea TempData. Entonces, una vez que se lee TempData, los valores se perderán.

¿Cómo puedo mantener el TempData después de leer?

Verifique la salida en el Método de Acción Prueba 1 y Prueba 2

public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = "Welcome to ASP.NET MVC!"; TempData["T"] = "T"; return RedirectToAction("About"); } public ActionResult About() { return RedirectToAction("Test1"); } public ActionResult Test1() { string Str = Convert.ToString(TempData["T"]); TempData.Keep(); // Keep TempData return RedirectToAction("Test2"); } public ActionResult Test2() { string Str = Convert.ToString(TempData["T"]); //OutPut - T return View(); } }

Si presta atención al código anterior, los datos no se pierden después de RedirectToAction, así como después de leer los datos y el motivo es que estamos utilizando TempData.Keep() . es eso

De esta forma, puede hacer que persista siempre que lo desee en otros controladores.

ViewBag / ViewData

Los datos persistirán hasta la vista correspondiente.


ASP.NET MVC nos ofrece tres opciones ViewData, ViewBag y TempData para pasar los datos del controlador a la vista y en la siguiente solicitud. ViewData y ViewBag son casi similares y TempData realiza una responsabilidad adicional. Permite discutir u obtener puntos clave sobre esos tres objetos:

Similitudes entre ViewBag y ViewData:

  • Ayuda a mantener los datos cuando te mueves del controlador a la vista.
  • Se utiliza para pasar datos del controlador a la vista correspondiente.
  • La vida corta significa que el valor se vuelve nulo cuando se produce la redirección. Esto se debe a que su objetivo es proporcionar una manera de comunicarse entre los controladores y las vistas. Es un mecanismo de comunicación dentro de la llamada del servidor.

Diferencia entre ViewBag y ViewData:

  • ViewData es un diccionario de objetos que se deriva de la clase ViewDataDictionary y es accesible usando cadenas como claves.
  • ViewBag es una propiedad dinámica que aprovecha las nuevas características dinámicas en C # 4.0.
  • ViewData requiere la conversión de tipos de datos para tipos de datos complejos y verifica valores nulos para evitar errores.
  • ViewBag no requiere encasillado para tipos de datos complejos.

Ejemplo de ViewBag y ViewData:

public ActionResult Index() { ViewBag.Name = "Monjurul Habib"; return View(); } public ActionResult Index() { ViewData["Name"] = "Monjurul Habib"; return View(); }

En vista:

@ViewBag.Name @ViewData["Name"]

TempData:

TempData también es un diccionario derivado de la clase TempDataDictionary y almacenado en una sesión de corta duración y es una clave de cadena y valor de objeto. La diferencia es que el ciclo de vida del objeto. TempData conserva la información durante el tiempo de una solicitud HTTP. Esto significa sólo de una página a otra. Esto también funciona con una redirección 302/303 porque está en la misma solicitud HTTP. Ayuda a mantener los datos cuando se mueve de un controlador a otro o de una acción a otra acción. En otras palabras, cuando redirecciona, "TempData" ayuda a mantener los datos entre esas redirecciones. Utiliza internamente variables de sesión. El uso de datos temporales durante la solicitud actual y posterior solo significa que se usa cuando está seguro de que la próxima solicitud se redireccionará a la siguiente vista. Requiere la conversión de tipos de datos para tipos de datos complejos y verificar los valores nulos para evitar errores. Generalmente se utiliza para almacenar mensajes de una sola vez como mensajes de error, mensajes de validación.

public ActionResult Index() { var model = new Review() { Body = "Start", Rating=5 }; TempData["ModelName"] = model; return RedirectToAction("About"); } public ActionResult About() { var model= TempData["ModelName"]; return View(model); }

El último mecanismo es la sesión que funciona como ViewData, como un diccionario que toma una cadena por clave y objeto por valor. Este se almacena en la cookie del cliente y puede utilizarse durante mucho más tiempo. También necesita más verificación para nunca tener información confidencial. Con respecto a ViewData o ViewBag, debe usarlo de manera inteligente para el rendimiento de la aplicación. Debido a que cada acción pasa por todo el ciclo de vida de una solicitud regular de asp.net mvc. Puede usar ViewData / ViewBag en su acción secundaria, pero tenga cuidado de no usarlo para rellenar los datos no relacionados que pueden contaminar su controlador.


También el alcance es diferente entre viewbag y temptdata. viewbag se basa en la primera vista (no se comparte entre los métodos de acción), pero los datos temporales se pueden compartir entre un método de acción y solo uno más.


TempData en Asp.Net MVC es una de las características muy útiles. Se utiliza para pasar datos de la solicitud actual a la solicitud posterior. En otras palabras, si queremos enviar datos de una página a otra mientras se realiza la redirección, podemos usar TempData, pero debemos hacer algunas consideraciones en el código para lograr esta función en MVC. Debido a que la vida útil de TempData es muy corta y solo se encuentra hasta que la vista de destino esté completamente cargada. Pero, podemos usar el método Keep () para persistir los datos en TempData.

Lee mas


TempData estará siempre disponible hasta la primera lectura, una vez que lo lea ya no esté disponible, puede ser útil para pasar un mensaje rápido también para ver que desaparecerá después de la primera lectura. ViewBag Es más útil cuando pasa datos rápidamente a la vista, normalmente debería pasar todos los datos a la vista a través del modelo, pero hay casos en los que el modelo viene directamente de la clase que se asigna a la base de datos como el marco de la entidad en ese caso. Para cambiar su modelo y pasar un nuevo dato, puede pegarlo en el viewbag. ViewData es solo una versión indexada de ViewBag y se usó antes de MVC3.


ViewBag, ViewData, TempData y estado de vista en MVC

http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html

ASP.NET MVC nos ofrece tres opciones ViewData, VieBag y TempData para pasar datos del controlador a la vista y en la siguiente solicitud. ViewData y ViewBag son casi similares y TempData realiza una responsabilidad adicional.

Similitudes entre ViewBag y ViewData:

Ayuda a mantener los datos cuando te mueves del controlador a la vista. Se utiliza para pasar datos del controlador a la vista correspondiente. La vida corta significa que el valor se vuelve nulo cuando se produce la redirección. Esto se debe a que su objetivo es proporcionar una manera de comunicarse entre los controladores y las vistas. Es un mecanismo de comunicación dentro de la llamada del servidor.

Diferencia entre ViewBag y ViewData:

ViewData es un diccionario de objetos que se deriva de la clase ViewDataDictionary y es accesible usando cadenas como claves. ViewBag es una propiedad dinámica que aprovecha las nuevas características dinámicas en C # 4.0. ViewData requiere la conversión de tipos de datos para tipos de datos complejos y verifica valores nulos para evitar errores. ViewBag no requiere encasillado para tipos de datos complejos.

Ejemplo de ViewBag y ViewData:

public ActionResult Index() { ViewBag.Name = "Arun Prakash"; return View(); } public ActionResult Index() { ViewData["Name"] = "Arun Prakash"; return View(); }

En Vista, llamamos como abajo:

@ViewBag.Name @ViewData["Name"]

TempData:

Ayuda a mantener los datos cuando se mueve de un controlador a otro o de una acción a otra acción. En otras palabras, cuando redirecciona, "Tempdata" ayuda a mantener los datos entre esas redirecciones. Utiliza internamente variables de sesión. Se supone que TempData es una instancia de muy corta duración, y solo debe usarlo durante las solicitudes actuales y posteriores.

El único escenario en el que el uso de TempData funcionará de manera confiable es cuando se está redireccionando. Esto se debe a que una redirección mata la solicitud actual (y envía el código de estado HTTP 302 Objeto Movido al cliente), luego crea una nueva solicitud en el servidor para servir a la vista redirigida.

Requiere la conversión de tipos de datos para tipos de datos complejos y verificar los valores nulos para evitar errores.

public ActionResult Index() { var model = new Review() { Body = "Start", Rating=5 }; TempData["ModelName"] = model; return RedirectToAction("About"); } public ActionResult About() { var model= TempData["ModelName"]; return View(model); }


void Keep() Calling this method with in the current action ensures that all the items in TempData are not removed at the end of the current request. @model MyProject.Models.EmpModel; @{ Layout = "~/Views/Shared/_Layout.cshtml"; ViewBag.Title = "About"; var tempDataEmployeet = TempData["emp"] as Employee; //need typcasting TempData.Keep(); // retains all strings values } void Keep(string key) Calling this method with in the current action ensures that specific item in TempData is not removed at the end of the current request. @model MyProject.Models.EmpModel; @{ Layout = "~/Views/Shared/_Layout.cshtml"; ViewBag.Title = "About"; var tempDataEmployeet = TempData["emp"] as Employee; //need typcasting TempData.Keep("emp"); // retains only "emp" string values }