2010-04-19 12 views
10

Ho una forma che contiene una serie di campi come:È possibile inviare un dizionario a un'azione .NET MVC?

<input type="text" name="User[123]" value="Alice" /> 
<input type="text" name="User[456]" value="Bob" /> 
... 

Qualora l'indice della matrice utente (123 e 456) sono l'identificativo del associata al valore. Sto cercando di aggiornare questi valori nel controller. Il mio pensiero è che un dizionario che mappa ID a nome avrebbe funzionato, ma creare l'azione come:

public void Save(Dictionary<string, string> user) { 
    // ... 
} 

risultati nel parametro utente ne sia nullo.

Quindi, è possibile passare un dizionario? o, c'è un altro metodo per raggiungere questo obiettivo?

risposta

11

È possibile per gli elenchi, sono sicuro che rimanda anche ai dizionari. Leggi attraverso Model Binding to a List di Phil Haack per capire come funziona il binding di liste.

Si dovrebbe essere in grado di fare questo:

<input type="hidden" name="User.Index" value="123" /> 
<input type="text" name="User[123]" value="Alice" /> 

<input type="hidden" name="User.Index" value="456" /> 
<input type="text" name="User[456]" value="Bob" /> 
+1

Quel post è obsoleto. Formato per il binding agli elenchi modificati, non è necessario specificare gli indici. – queen3

+1

Il post non è obsoleto. È stato aggiornato con le informazioni rilevanti per MVC 2 e per tenere conto che ".index" è facoltativo. – Levi

+0

@Levi Sei sicuro? L'esempio di codice sopra non funziona per me. Ottengo null come parametro utente nel metodo Save. Ho MVC 2 RTM e VS 2008. –

7

per ASP.NET MVC 2 uso questo:

<input type="hidden" name="User[0].Key" value="123" /> 
<input type="text" name="User[0].Value" value="Alice" /> 

<input type="hidden" name="User[1].Key" value="456" /> 
<input type="text" name="User[1].Value" value="Bob" /> 

È necessario un campo aggiuntivo per l'utente nascosto [i] .Key. i è un indice a base zero. Dovrebbe essere ininterrotto.

quando si esegue il bind del modello su un dizionario, si sta effettivamente vincolando a uno ICollection<KeyValuePair<,>>. Quindi è necessario per l'utente [x] .Key e User [x] .Value (per ricostituire l'oggetto KeyValuePair)

Riferimenti

+1

Ho creato i metodi di estensione dell'helper HTML per poterlo fare per voi: vedere https://github.com/ErikSchierboom/aspnetmvcdictionaryserialization –

Problemi correlati