Связывание модели в списке поддержки бета-версии ASP.NET MVC<T>?
Возьмите пример классов ниже. Я хочу отобразить клиента и два адреса (из списка) в форме. Поддерживает ли это механизм связывания в бета-версии 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 -->
5 ответов
Я никогда не пробовал, но посмотрите этот пост, он касается привязки модели к списку, может быть, он может вам помочь.
Вы можете передать список объектов с помощью ViewData, но вам нужно изменить некоторые строки. Узнайте больше здесь:
и здесь:
ASP.NET MVC: как передать список (из класса в модели) в повторитель в представлении?
Надеюсь это поможет
редактировать
Если вы используете модель, вам нужно сначала настроить DataContext и выбрать список, но вы обязательно можете использовать сгенерированные классы, если используете LINQ.
Просто чтобы сделать это завершенным. Важно, чтобы вы использовали скрытые поля с именем 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 -->
Отлично работает!
Используйте NameValueDeserializer MvcContrib, чтобы упростить его. Предположим, что ваша страница происходит от ViewPage
<%= 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" - это префикс.
Вы можете найти этот пост интересным и актуальным.
Я определил похожий объект. Я следовал за постом о привязке к списку, как указано выше, хотя привязка работает, я не смог использовать белый или черный список привязки в параметре действия контроллера. Модель это IList