2009-01-02 9 views
9

Tome las clases de ejemplo a continuación. Quiero mostrar el cliente y dos direcciones (de una LISTA) en un formulario. ¿La carpeta modelo en MVC beta es compatible con esto o tendré que escribir mi propia carpeta personalizada?¿El modelo Binder en ASP.NET MVC Beta Support List <T>?

public class Customer 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public List<Address> Addresses { get; set; } 

    public Customer() 
    { 
     Addresses = new List<Address>(); 
    } 

} 

public class Address 
{ 
    public int Line1 { get; set; } 
    public int Line2 { get; set; } 
    public int City { get; set; } 
    public int State { get; set; } 
    public int Zip { get; set; } 
} 

¿Cómo codificaría los campos? ¿Me gusta esto?

<!-- some HTML formatting --> 
<%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[0].Line1)%> 
<!-- some more HTML formatting --> 
<%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[1].Line1)%> 
<!-- end of HTML form formatting --> 

Respuesta

5

Nunca lo he intentado, pero vea la publicación this, se trata de un modelo vinculante a una lista, tal vez pueda ayudarlo.

0

Puede pasar una lista de objetos con ViewData así, pero debe cambiar algunas de las líneas. Lee más aquí:

http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx

y aquí:

ASP.NET MVC: How do I pass a list (from a class in Model) to a repeater in a View?

Esperanza esto ayuda


Editar


Si usa un modelo, primero debe configurar el DataContext y seleccionar la lista, pero seguro que puede usar las clases generadas si usa LINQ.

0

Definí un objeto similar. Seguí la publicación sobre el enlace a una lista como se mencionó anteriormente, mientras que el enlace funciona, no pude usar la lista blanca ni la lista negra en el parámetro de acción del controlador. El modelo es un IList

1

Utilice NameValueDeserializer de MvcContrib para hacerlo más sencillo. Supongamos que su página se deriva de ViewPage <Customer>. Usted puede hacer esto:

<%= Html.TextBox("Address[0].Line1", ViewData.Model.Address[0].Line1)%> 
<%= Html.TextBox("Address[1].Line1", ViewData.Model.Address[1].Line1)%> 

Y esto:

public ActionResult Save([Deserialize]Customer customer) 

Y el cliente va a deserializado del poste formulario con la dirección de recogida poblada. Sus índices no tienen que estar en secuencia; esto admite casos en los que desee eliminar filas del lado del cliente antes de que se publique.

En caso de que esté deserializando algo del diccionario de datos de vista (en lugar del Modelo), entonces la sintaxis es similar a [Deserialize ("cliente")], donde "cliente" es el prefijo.

Puede encontrar este blog post interesante y relevante.

1

Solo para hacer esto completo. Es importante que use los campos ocultos con el nombre Index. Así que mi código anterior se convierte en esto:

<!-- some HTML formatting --> 
<%= Html.Hidden("customer.address.Index", 0) %> 
<%= Html.TextBox("customer.address[0].line1", ViewData.Customer.Address[0].Line1)%> 
<!-- some more HTML formatting --> 
<%= Html.Hidden("customer.address.Index", 1) %> 
<%= Html.TextBox("customer.address[1].line1", ViewData.Customer.Address[1].Line1)%> 
<!-- end of HTML form formatting --> 

¡Funciona como un encanto!

+0

Creo que necesitaré algo como esto en el futuro cercano, buena pregunta. –

Cuestiones relacionadas