I'm trying to bind dictionary values within MVC.
Within the action I have:
model.Params = new Dictionary<string, string>();
model.Params.Add("Value1", "1");
model.Params.Add("Value2", "2");
model.Params.Add("Value3", "3");
and within the view I have:
@foreach (KeyValuePair<string, string> kvp in Model.Params)
{
<tr>
<td>
<input type="hidden" name="Params.Key" value="@kvp.Key" />
@Html.TextBox("Params[" + kvp.Key + "]")
</td>
</tr>
}
But the view doesn't display the initial values, and when the form is submitted the Params
property is null?
In ASP.NET MVC 4, the default model binder will bind dictionaries using the typical dictionary indexer syntax property[key]
.
If you have a Dictionary<string, string>
in your model, you can now bind back to it directly with the following markup:
<input type="hidden" name="MyDictionary[MyKey]" value="MyValue" />
For example, if you want to use a set of checkboxes to select a subset of a dictionary's elements and bind back to the same property, you can do the following:
@foreach(var kvp in Model.MyDictionary)
{
<input type="checkbox" name="@("MyDictionary[" + kvp.Key + "]")"
value="@kvp.Value" />
}