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

したがってContact、ContactListのそれぞれSelectedContactについて、モデルのプロパティのラジオボタンを 1 つ作成することがわかります。しかし、これは複雑なタイプ (Contact オブジェクト) であるため、入力ボタンをクリックすると、OrderSummary コントローラーのインデックス アクションに移動します。

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

contactVm パラメータが空で、モデル バインディングが機能していないようです

4

1 に答える 1

1

Model Binder には、Contact クラスを再水和するのに十分な情報がありません。ViewModel の各プロパティについて、モデル全体をバインドするためにリクエスト (フォーム、クエリ文字列など) で値を提供する必要があるため、この例では機能しません。

ストレージから連絡先リストを読み込んでいると仮定しています。(例:DB)

ViewModel で SelectedContactId のプロパティを公開し、これをRadioButtonForメソッドとして使用し、リスト内の連絡先の ID をラジオ ボタンの値として使用します。

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

次に、View モデルを読み込むときに、連絡先をストレージから読み込んで、ID で連絡先を見つけることができます。

于 2015-03-23T12:58:42.013 に答える