2009-06-08 12 views
11

Ho una classe di dati che contiene un numero di campi:Associazione a una raccolta di oggetti fortemente tipizzato in 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; } 
} 

Se ho capito Scott Hanselman's take on binding arrays of objects, dovrei essere in grado di creare una vista modulo che rende HTML che assomiglia a questo:

<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> 

dovrei quindi in grado di catturare questi dati in mio controller con un metodo di azione che assomiglia a questo:

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

Ma non funziona. La variabile array è sempre nullo. Interpreto questo dato che l'associazione dei dati non funziona. Ma perché?

+0

potrebbe tentare un lista generica invece di una matrice. –

+0

L'elenco cercato invece di Person [] restituisce ancora null. Lo schema di Hanselman richiede Person []. –

+0

Hai eseguito il debug e analizzato i tuoi dati POST per verificare che i dati siano pubblicati come da articolo di Scott? –

risposta

21

I suoi campi devono essere denominati array [0] .id, array [0] .Tipo, ...

Essi dovrebbero avere il nome dell'istanza matrice, non il nome del tipo all'interno della matrice.

In alternativa si potrebbe cambiare la firma del ActionController a: Person [] Persona

Si ottiene il punto :-)

+4

Sonofabitch .... –

+0

Mi ci sono voluti circa 10 secondi di guardare il link che hai postato .. è una di quelle cose cieche che tutti conosciamo e odiamo. ;-) –

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

dovrebbe essere:

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