ASP.NET MVC Enlace a un diccionario

Estoy intentando vincular valores de diccionario dentro de MVC.

Dentro de la acción que tengo:

model.Params = new Dictionary(); model.Params.Add("Value1", "1"); model.Params.Add("Value2", "2"); model.Params.Add("Value3", "3"); 

y dentro de la vista tengo:

 @foreach (KeyValuePair kvp in Model.Params) {    @Html.TextBox("Params[" + kvp.Key + "]")   } 

Pero la vista no muestra los valores iniciales, y cuando se envía el formulario, la propiedad Params es nula.

Deberías echarle un vistazo a esta publicación de scott hanselman: http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

La carpeta predeterminada solo entiende los diccionarios en el formato:

 params[0].key = kvp.key params[0].value = kvp.value 

El índice del parámetro debe ser secuencial, comenzando desde 0 y sin ningún espacio. Los asistentes actuales no son compatibles con esto, por lo que debe crear los campos de entrada de formulario por su cuenta.

Por supuesto, puede implementar su propia carpeta, como esta: http://siphon9.net/loune/2009/12/a-intuitive-dictionary-model-binder-for-asp-net-mvc/

En ASP.NET MVC 4, el archivador de modelo predeterminado vinculará diccionarios utilizando la property[key] syntax del indexador de diccionario típico property[key] .

Si tiene un Dictionary en su modelo, ahora puede volver a vincularlo directamente con el siguiente marcado:

  

Por ejemplo, si desea utilizar un conjunto de casillas de verificación para seleccionar un subconjunto de elementos de un diccionario y volver a enlazar a la misma propiedad, puede hacer lo siguiente:

 @foreach(var kvp in Model.MyDictionary) {  } 

Basándose en la respuesta de @ AntP, hay una manera aún menos detallada, dejando que MVC haga más trabajo (al menos con TextBoxFor() en un Dictionary – No he probado CheckBoxFor() en un Dictionary ):

 @foreach(var kvp in Model.MyDictionary) { @Html.Label(kvp.Key); @Html.TextBoxFor(m => m.MyDictionary[kvp.Key]); }