-1

我有一个班级联系人:

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>
}

因此,您会看到,对于ContactContactList 中的每个,我SelectedContact都为模型的属性创建了一个单选按钮。但是,当我单击输入按钮并导航到 OrderSummary 控制器的索引操作时,这是复杂类型(联系人对象)

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

我的 contactVm 参数为空,模型绑定似乎不起作用

4

1 回答 1

1

Model Binder 没有足够的信息来补充 Contact 类。对于 ViewModel 的每个属性,都需要在请求中提供一个值(例如表单、查询字符串等)来绑定整个模型,因此在您的示例中它不起作用。

我假设您正在从存储中加载联系人列表。(例如数据库)

我将在 ViewModel 上为 SelectedContactId 公开一个属性,并将其用作RadioButtonFor方法,并使用列表中联系人的 ID 作为单选按钮的值:

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

然后,当您在 View 模型中加载时,您可以从存储中加载联系人,并通过 ID 找到联系人

于 2015-03-23T12:58:42.013 回答