Pregunta

Estoy usando RC1 de ASP.NET MVC.

Estoy tratando de extender Phil Ejemplo de enlace modelo de Haack . Estoy tratando de usar el cuaderno de modelos predeterminado para enlazar el siguiente objeto:

public class ListOfProducts
{
    public int Id { get; set; }
    public string Title{ get; set; }
    List<Product> Items { get; set; }
}

public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

Estoy usando el código del ejemplo de Phil con algunas modificaciones:

Controlador:

using System.Collections.Generic;
using System.Web.Mvc;

namespace TestBinding.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";

            return View();
        }

        //Action method on HomeController
        public ActionResult UpdateProducts(ListOfProducts productlist)
        {
            return View(productlist);
        }
    }

    public class Product
    {
        public string Name { get; set; }
        public decimal Price { get; set; }
    }

    public class ListOfProducts
    {
        public int Id { get; set; }
        public string Title { get; set; }
        List<Product> Items { get; set; }
    }
}

Ver:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

    <asp:Content ID="indexHead" ContentPlaceHolderID="head" runat="server">
        <title>Home Page</title>
    </asp:Content>

    <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
        <form method="post" action="/Home/UpdateProducts">
            <input type="text" name="productlist.id" value="99" />
            <input type="text" name="productlist.Title" value="SomeTitle" />

            <input type="hidden" name="productlist.Index" value="0" />
            <input type="text" name="productlist.items[0].Name" value="Beer" />
            <input type="text" name="productlist.items[0].Price" value="7.32" />

            <input type="hidden" name="productlist.Index" value="1" />
            <input type="text" name="productlist.Items[1].Name" value="Chips" />
            <input type="text" name="productlist.Items[1].Price" value="2.23" />

            <input type="hidden" name="productlist.Index" value="2" />
            <input type="text" name="productlist.Items[2].Name" value="Salsa" />
            <input type="text" name="productlist.Items[2].Price" value="1.23" />

            <input type="submit" />
        </form>
    </asp:Content>

Mi problema es que los tipos simples (Id y Título) aparecen en el objeto de la lista de productos, pero no en la Lista. Entonces:

  • ¿Mi código es malo (no estaría sorprendido)?
  • ¿El archivador de modelos predeterminado puede manejar los objetos ListOfProducts?
  • Si el cuaderno de modelos predeterminado no manejará este tipo de objeto, ¿qué debo hacer (ejemplos si es posible)?

Gracias de antemano.

¿Fue útil?

Solución

Para responder a mi propia pregunta:

¡Soy un maniquí!

Mi ejemplo no funciona porque la propiedad Items de la clase ListOfProducts no es pública:

public class ListOfProducts
{
    public int Id { get; set; }
    public string Title{ get; set; }
    List<Product> Items { get; set; }
}

He cambiado:

List<Product> Items { get; set; } 

a:

public List<Product> Items { get; set; }

y mi código funcionó.

Para concluir, el cuaderno de modelos predeterminado funciona con tipos que contienen propiedades de tipo Lista.

Otros consejos

Comenzando con RC 1:

  • El índice oculto ya no es necesario
  • El número en [] debe comenzar con 0 y debe ascender.

Tu numeración se ve bien.

También, noté que usaste diferentes casillas en el nombre de la propiedad de tus artículos. Eso no debería hacer una diferencia, pero vale la pena comprobarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top