es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo mostrar el objeto TempData deserializado en la vista?

Estoy obteniendo un error System.NullReferenceException: ‘Referencia a objeto no establecida como instancia de un objeto.’ en el archivo Index2.cshtml después de deserializar mi objeto TempData. ¿Cómo puedo mostrar mi objeto sin obtener este error? (Esta es la primera vez que pregunto aquí, disculpa si cometí errores).

var products = new List<products>
            {
                new Products {Id=56, ProductName="x",Quantity=45},
                new Products {Id=55, ProductName="y",Quantity=5},
                new Products {Id=54, ProductName="z",Quantity=4},
                new Products {Id=53, ProductName="t",Quantity=8},
                new Products {Id=52, ProductName="k",Quantity=12}
            };
string data = JsonSerializer.Serialize(products);
TempData["products"] = data;
return RedirectToAction("Index2");

public IActionResult Index2()
{
var data = TempData[“products”].ToString();
List products = JsonSerializer.Deserialize<>>(data);

return View();

}

Index2.cshtml

    @foreach(var item in TempData[“products”] as List)
    {

  • @item.ProductName
  • }

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error “System.NullReferenceException: ‘Referencia a objeto no establecida como instancia de un objeto'” indica que la referencia al objeto que estás intentando usar es nula o no apunta a una instancia de un objeto. En este caso, parece que el objeto TempData puede no tener un valor asignado.

    Para mostrar el objeto sin obtener este error, puedes agregar una verificación de nulos para asegurarte de que el objeto TempData tenga un valor antes de intentar usarlo. Aquí tienes una versión actualizada de tu código que incluye esta verificación:

    public IActionResult Index2()
    {
        // Comprobar si TempData contiene la clave "productos"
        if (TempData.ContainsKey("productos"))
        {
            // Obtener los datos y deserializarlos
            var datos = TempData["productos"].ToString();
            List<productos> productos = JsonSerializer.Deserialize<><productos>>(datos);
    
            // Pasar los datos deserializados a la vista
            return View(productos);
        }
    
        // Si TempData no contiene la clave "productos", mostrar una vista de error
        return View("Error");
    }
    

    Y en tu vista, puedes iterar a través de la lista de productos que se pasó a la vista:

    <ul>
        @foreach (var elemento in Model)
        {
            <li>@elemento.NombreProducto</li>
        }
    </ul>
    

    Nota que al pasar los datos deserializados a la vista como modelo, puedes acceder a ellos directamente sin tener que usar TempData nuevamente.

Comments are closed.