Я бы порекомендовал вам прочитать это сообщение в блоге о том, как должны называться поля ввода, чтобы вы могли связываться со словарем Поэтому вам понадобится дополнительное скрытое поле для ключа:
<input type="hidden" name="items[0].Key" value="key1" />
<input type="text" name="items[0].Value" value="15.4" />
<input type="hidden" name="items[1].Key" value="key2" />
<input type="text" name="items[1].Value" value="17.8" />
, который может быть сгенерирован с чем-то вроде:
<% var index = 0; %>
<% foreach (var key in Model.Keys) { %>
<%: Html.Hidden("items[" + index + "].Key", key) %>
<%: Html.TextBox("items[" + index +"].Value", Model[key]) %>
<% index++; %>
<% } %>
Как говорится, лично я бы порекомендовал вам НЕ использовать словари в своих взглядах. Они безобразны, и для того, чтобы сгенерировать правильные имена для подшивки модели, вам нужно написать некрасивый код. Я бы использовал вид моделей. Вот пример:
Модель:
public class MyViewModel
{
public string Key { get; set; }
public double? Value { get; set; }
}
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new[]
{
new MyViewModel { Key = "key1", Value = 15.4 },
new MyViewModel { Key = "key2", Value = 16.1 },
new MyViewModel { Key = "key3", Value = 20 },
};
return View(model);
}
[HttpPost]
public ActionResult Index(IEnumerable<MyViewModel> items)
{
return View(items);
}
}
Просмотр (~/Views/Home/Index.aspx
):
<% using (Html.BeginForm()) { %>
<%: Html.EditorForModel() %>
<input type="submit" value="OK" />
<% } %>
Шаблон редактора (~/Views/Home/EditorTemplates/MyViewModel.ascx
):
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<Models.MyViewModel>" %>
<%: Html.HiddenFor(x => x.Key) %>
<%: Html.TextBoxFor(x => x.Value) %>