У меня есть форма, которая содержит серию полей как:
<input type="text" name="User[123]" value="Alice" />
<input type="text" name="User[456]" value="Bob" />
...
То, где индекс Пользовательского массива (123 и 456) является идентификатором, связалось со значением. Я пытаюсь обновить эти значения в контроллере. Мои взгляды состоят в том, что Словарь, который отображает идентификатор для именования, работал бы, но создание действия как:
public void Save(Dictionary<string, string> user) {
// ...
}
результаты в пользовательском параметре, являющемся пустым.
Так, действительно ли передачей является возможный Словарь? или, есть ли другой метод для достижения этого?
Это возможно для списков, я уверен, что это переносится и на словари. Прочтите Привязка модели к списку Фила Хаака, чтобы понять, как работает привязка списка.
Вы должны уметь это сделать:
<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" />
См. http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx для получения информации о синтаксисе, необходимом для привязки к словарю. Обратите внимание, в частности, на пример привязки тикеров компании MSFT + AAPL примерно на полпути к этому посту.
Для ASP.NET MVC 2 используйте это:
<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" />
Вам нужно дополнительное скрытое поле User [i] .Key. i - индекс, отсчитываемый от нуля. Он должен быть непрерывным.
когда вы моделируете привязку к словарю, вы фактически привязываетесь к
ICollection
. Итак, вам нужны User [x] .Key и User [x] .Value (для воссоздания объекта KeyValuePair)>
Ссылки