Привязка к коллекции строго типизированных объектов в ASP.NET MVC - PullRequest
11 голосов
/ 09 июня 2009

У меня есть класс данных, который содержит несколько полей:

public class Person
{
    public int id { get; set }
    public string Name { get; set; }
    public double Rate { get; set; }
    public int Type { get; set; }
}

Если я понимаю Скотт Хансельман о связывании массивов объектов , я смогу создать представление формы, которое будет отображать HTML, который выглядит следующим образом:

<input name="Person[0].id" value="26" type="hidden" />
<input name="Person[0].Name" value="Tom Smith" type="text" />
<input name="Person[0].Rate" value="40.0" type="text" />
<select name="Person[0].Type">
    <option selected="selected" value="1">Full Time</option>
    <option value="2">Part Time</option>
</select>

<input name="Person[1].id" value="33" type="hidden" />
<input name="Person[1].Name" value="Fred Jones" type="text" />
<input name="Person[1].Rate" value="45.0" type="text" />
<select name="Person[1].Type">
    <option value="1">Full Time</option>
    <option selected="selected" value="2">Part Time</option>
</select>

Затем я смогу получить эти данные в моем контроллере с помощью метода действия, который выглядит следующим образом:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult People(Person[] array)
{
    // Do stuff with array
}

Но это не работает. Переменная массива всегда равна нулю. Я интерпретирую это как привязка данных не работает. Но почему?

Ответы [ 2 ]

21 голосов
/ 09 июня 2009

Ваши поля должны иметь имя array [0] .id, array [0] .Type, ...

У них должно быть имя экземпляра массива, а не имя типа внутри массива.

В качестве альтернативы вы можете изменить подпись actioncontroller на: Человек [] Человек

Вы получаете очко: -)

6 голосов
/ 09 июня 2009
<input name="Person[0].Rate" value="40.0" type="text" />

должно быть:

<input name="array[0].Rate" value="40.0" type="text" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...