2009-06-08 21 views
11

que tienen una clase de datos que contiene un número de campos:La unión a una colección de objetos de tipo fuerte en ASP.NET MVC

public class Person 
{ 
    public int id { get; set } 
    public string Name { get; set; } 
    public double Rate { get; set; } 
    public int Type { get; set; } 
} 

Si entiendo Scott Hanselman's take on binding arrays of objects, yo debería ser capaz de crear una vista de formulario que representa HTML que se ve así:

<input name="Person[0].id" value="26" type="hidden" /> 
<input name="Person[0].Name" value="Tom Smith" type="text" /> 
<input name="Person[0].Rate" value="40.0" type="text" /> 
<select name="Person[0].Type"> 
    <option selected="selected" value="1">Full Time</option> 
    <option value="2">Part Time</option> 
</select> 

<input name="Person[1].id" value="33" type="hidden" /> 
<input name="Person[1].Name" value="Fred Jones" type="text" /> 
<input name="Person[1].Rate" value="45.0" type="text" /> 
<select name="Person[1].Type"> 
    <option value="1">Full Time</option> 
    <option selected="selected" value="2">Part Time</option> 
</select> 

debería entonces ser capaz de capturar estos datos en mi controlador con un método de acción que tiene este aspecto:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult People(Person[] array) 
{ 
    // Do stuff with array 
} 

Pero no funciona. La variable de matriz siempre es nula. Lo interpreto porque el enlace de datos no funciona. ¿Pero por qué?

+0

podría tratar de una lista genérica en lugar de una matriz. –

+0

Lista de intentos en lugar de Persona [], aún devuelve nulo. El patrón de Hanselman requiere Persona []. –

+0

¿Ha depurado y analizado sus datos POST para verificar que los datos se publiquen según el artículo de Scott? –

Respuesta

21

Sus campos se deben nombrar array [0] .id, array [0] .Type, ...

Deben tener el nombre de la instancia de matriz, no el nombre del tipo dentro de la matriz.

Alternativamente, usted podría cambiar la firma del ActionController a: Persona [] Persona

Usted consigue el punto :-)

+4

Sonofabitch .... –

+0

Tardé unos 10 segundos en mirar el enlace que publicaste ... es uno de esos puntos ciegos que todos conocemos y odiamos. ;-) –

6
<input name="Person[0].Rate" value="40.0" type="text" /> 

debe ser:

<input name="array[0].Rate" value="40.0" type="text" /> 
Cuestiones relacionadas