Возможно ли 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" />

Ответ 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)

Ссылки