2010-04-19 11 views
10

I tienen una forma que contiene una serie de campos como:¿Es POSTing un diccionario para una acción .NET MVC posible?

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

Cuando el índice de la matriz de usuario (123 y 456) son ID de asociado con el valor. Estoy tratando de actualizar estos valores en el controlador. Mi pensamiento es que un diccionario que mapea Identificación de nombre iba a funcionar, pero la creación de la acción como:

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

resultados en el parámetro de usuario siendo nula.

Entonces, ¿está pasando un Diccionario posible? o, ¿hay otro método para lograr esto?

Respuesta

11

Es posible para las listas, estoy seguro que se traslada para los diccionarios también. Lee Model Binding to a List de Phil Haack para entender cómo funciona el enlace de listas.

Usted debe ser capaz de hacer esto:

<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

Esa publicación está obsoleta. El formato para el enlace a las listas ha cambiado, no necesita especificar índices. – queen3

+1

La publicación no está obsoleta. Se actualizó con información relevante para MVC 2 y para tener en cuenta que ".index" es opcional. – Levi

+0

@Levi ¿Estás seguro? El ejemplo de código anterior no funciona para mí. Obtengo nulo como parámetro de usuario en el método Guardar. Tengo MVC 2 RTM y VS 2008. –

7

para ASP.NET MVC 2 uso esto:

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

Usted necesita un extra de usuario campo oculto [i] .KEY. i es índice basado en cero. Debe ser ininterrumpido.

Cuando modela vincular a un diccionario, en realidad está vinculando a ICollection<KeyValuePair<,>>. Por lo que necesita Usuario [x] .KEY y Usuario [x] .Value (para reconstituir el objeto KeyValuePair)

Referencias

+1

He creado métodos de extensión de ayuda HTML para poder hacer esto por usted: vea https://github.com/ErikSchierboom/aspnetmvcdictionarizaciónerialización –

Cuestiones relacionadas