2009-02-12 19 views
5

Tengo un escenario en el que estoy atascado: tengo un objeto de dominio que tiene una colección de objetos adjuntos. Algo como esto:ASP.NET MVC: manejo de objetos múltiples en un formulario

public class Person 
{ 
    public string Name { get; set; } 
    public IList<PhoneNumber> PhoneNumbers {get; set; } 
    public IList<Address> Addresses { get; set; } 
} 

La interfaz de usuario que el cliente desea tiene un único formulario de entrada para agregar y editar. Un usuario podría ingresar 0 en muchos teléfonos/direcciones para cada persona. ¿Cómo manejo la publicación de la colección de valores en el controlador?

Puedo pensar en un par de enfoques, pero todos parecen de fuerza bruta y no muy elegantes. ¿Existe una mejor práctica para manejar este tipo de problema?

Respuesta

0

En el pasado he usado la convención railsy para esto.

<input name="Parent[childObjectType][serial_number]" type="textbox" value="" /> 

Así que para su situación presente

<input name="Person[PhoneNumber][1]" type="TextBox" value="555-1212" /> 
<input name="Person[PhoneNumber][2]" type="TextBox" value="555-555-1212" /> 

y se puede incrementar el número de serie y replicar el elemento en javascript para obtener múltiples, y utilizar un FormCollection en su acción que le dará una forma de obtener estos elementos.

El valor predeterminado del equipo de mvc es utilizar un ModelBinder y la sintaxis de puntos para esta operación. Sin embargo, esto hace que jquery y otros frameworks javascript se vuelvan molestos.

0

He estado empezando a usar json y jQuery para publicar tipos complejos en una acción de controlador usando JSON.NET y un JsonFilter en el lado del servidor que toma automáticamente su objeto json y lo serializa al tipo C# equivalente. He encontrado que esta es una solución muy limpia y más fácil de probar. Puede consultar esta publicación con el código de muestra para descargar y comenzar a usarlo. Es bastante sencillo.

http://blogger.forgottenskies.com/?p=252

3

Se apoya en el marco mediante el uso de una "forma de disposición" especial. Phil Haack tiene un artículo sobre esto, check this out

Editar Scott Hanselman (http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx) ha publicado una actualización sobre esto. Además, en RC1 parece (se encontró con este mysel anoche) que los índices deben estar basados ​​en 0 y aumentar constantemente (al menos si usted es "vinculante" contra IList)

Edit2 Link no parece funcionar

0

En la publicación de Hanselman mencionada, escribe que no necesita índices, solo tiene el mismo nombre para cuadros de entrada y tiene un parámetro de matriz en acción y funciona.

Cuestiones relacionadas