Возьмите приведенные ниже примеры классов. Я хочу отобразить в форме клиента и два адреса (из СПИСКА). Поддерживает ли это связыватель модели в бета-версии MVC, или мне придется написать собственный пользовательский связыватель?
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Address> Addresses { get; set; }
public Customer()
{
Addresses = new List<Address>();
}
}
public class Address
{
public int Line1 { get; set; }
public int Line2 { get; set; }
public int City { get; set; }
public int State { get; set; }
public int Zip { get; set; }
}
Как бы вы закодировали поля? Как это?
<!-- some HTML formatting -->
<%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[0].Line1)%>
<!-- some more HTML formatting -->
<%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[1].Line1)%>
<!-- end of HTML form formatting -->





Вы можете передать список объектов с ViewData таким образом, но вам нужно изменить некоторые строки. Подробнее читайте здесь:
и здесь:
ASP.NET MVC: как передать список (из класса в модели) в репитер в представлении?
Надеюсь это поможет
Редактировать
Если вы используете модель, вам нужно сначала настроить DataContext и выбрать список, но убедитесь, что вы можете использовать классы, сгенерированные, если вы используете LINQ.
Я никогда не пробовал, но см. Сообщение это, он о привязке модели к списку, может быть, это может вам помочь.
Я определил похожий объект. Я следил за сообщением о привязке к списку, как указано выше. Хотя привязка работает, я не смог использовать белый или черный список привязки в параметре действия контроллера. Модель является IList
Используйте NameValueDeserializer MvcContrib, чтобы упростить задачу. Предположим, что ваша страница происходит от ViewPage <Customer>. Ты можешь сделать это:
<%= Html.TextBox("Address[0].Line1", ViewData.Model.Address[0].Line1)%>
<%= Html.TextBox("Address[1].Line1", ViewData.Model.Address[1].Line1)%>
И это:
public ActionResult Save([Deserialize]Customer customer)
И клиент будет десериализован из сообщения формы с заполненной коллекцией адресов. Ваши индексы не обязательно должны быть последовательными - это поддерживает случаи, когда вы хотите удалить строки на стороне клиента до того, как произойдет публикация.
В случае, если вы десериализуете что-то из словаря данных представления (вместо модели), тогда синтаксис похож на [Deserialize ("customer")], где "customer" - это префикс.
Вы можете найти этот Сообщение блога интересным и актуальным.
Просто чтобы завершить это. Важно, чтобы вы использовали скрытые поля с именем Index. Итак, мой код выше становится таким:
<!-- some HTML formatting -->
<%= Html.Hidden("customer.address.Index", 0) %>
<%= Html.TextBox("customer.address[0].line1", ViewData.Customer.Address[0].Line1)%>
<!-- some more HTML formatting -->
<%= Html.Hidden("customer.address.Index", 1) %>
<%= Html.TextBox("customer.address[1].line1", ViewData.Customer.Address[1].Line1)%>
<!-- end of HTML form formatting -->
Работает как часы!
Думаю, мне понадобится что-то подобное в ближайшее время, хороший вопрос.