Радиобокс для связывания модели с классом

У меня есть класс

public class Contact
{
  public int Id { get;set; }
  public Boolean DefaultYN {get;set; }
  public string AdrType { get; set; }
  public string Street {get; set; }
  public string Town {get; set; }
  public string HouseNr { get; set; }
  public string PostCd { get; set; }     
}

У меня есть VieModel

public class ContactVm
{
    public Contact SelectedContact { get; set; }
    public Contact SelectedInvoiceContact { get;set; }
    public List<Contact> ContactList { get; set; }
}

У меня сильно вспыльчивый вид

@model MvcBeaWeb.Models.ContactVm
<!-- Address Div -->
@using (Html.BeginForm("Index", "OrderSummary"))
{   
  <div id="deliveryAddressTab" class="deliveryAddressTab" style="margin: 10px 3px;">
    @foreach (var item in Model.ContactList)
    {                            
      <div style="display: inline-block; float: left;">
        @Html.RadioButtonFor(x => x.SelectedContact, item, new {@checked = true ,id = "item" + item.Id })
      </div>
      <div id="@item.Id" style="float: left; margin-left: 10px; font-weight: 500;">
        <span class="spnTown">@item.PostCd @item.Town</span>
      </div>                
    }
  </div>
}

Итак, вы видите, что для каждого Contact из ContactList я создаю одну радиокнопку для SelectedContact свойство модели. Но так как это сложный тип (контактный объект), когда я нажимаю кнопку ввода, и я перехожу к индексу действия моего контроллера OrderSummary

public ActionResult Index (ContactVm contactVm)
{
  /* .... */
}

мой параметр contactVm пуст и привязка модели, кажется, не работает

1 ответ

Решение

В связывателе моделей недостаточно информации для повторного увлажнения класса Contact. Для каждого свойства ViewModel в запросе должно быть указано значение (например, формы, строка запроса и т. Д.), Чтобы связать всю модель, поэтому в вашем примере это не будет работать.

Я предполагаю, что вы загружаете список контактов из хранилища. (например, БД)

Я бы выставил свойство для viewModel для SelectedContactId и использовал бы его как метод RadioButtonFor, а также использовал бы идентификатор контакта в списке в качестве значения переключателя:

Html.RadioButtonFor(m => m.SelectedContactId, item.Id )

Затем, когда вы загружаете модель View, вы можете загрузить контакты обратно из хранилища и найти контакт по идентификатору.

Другие вопросы по тегам