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