1

ネストされたオブジェクトへのバインドがどのように機能するのかよくわからないので、私の苦境を説明させてください:

これが私のクラスです:

public class DeliveryContactViewModel
    {        
        public List<DeliveryContact> Contacts;        
        public string Name { get; set; }
    }

    public class DeliveryContact
    {

        public string ContactType { get; set; }
        public string ContactAddress { get; set; }
        public List<bool> Reasons { get; set; }
    }

わかりましたので、ここで特別なことは何もありません...

今すぐビュー部分に取り組みましょう:

私のアイデアは、フォームを作成することでした(疑似コードに続く)

<form action="/path/to/action" id="frm-contact" method="post">
    <input id="someID" name="Name" type="text" />
    <fieldset>
       <select name="i'm_not_sure_what_to_put_here">
           <option value="someValue1">someValue1</option>
           <option value="someValue2">someValue2</option>
       </select>
       <input id="someID" name="ContactAddress_but_i_want_it_in_the_First_DeliveryContact" type="text" />
      <input type="checkbox" value="Reason1"  name="again_not_sure"/>
      <input type="checkbox" value="Reason2"  name="again_not_sure"/>
      <input type="checkbox" value="Reason3"  name="again_not_sure"/>
  </fieldset>
</form>

//そして、これらのフィールドセットを必要な数だけ「連絡先」(「DeliveryContact」のリストに入れる) にするというアイデアです。

疑似コードからわかるように、HTML 要素をモデルに正常にバインドするために、HTML 要素に名前を付ける方法がわかりません。

そして最後に、コントローラーの部分は、どのように署名するのですか。これで十分でしょうか?View の命名規則は、このようなコントローラーにすべてを一致させるのに十分でしょうか。

public ActionResult DeliveryContact(DeliveryContactViewModel model)
{
     foreach(var item in model.Contacts)
     {    
        //something
      }
}

乾杯、T.

4

1 に答える 1

2

merekelが提案したように、トリックはhtml要素名にインデックスを追加することでした。

例:

<select name="Contacts[1].ContactType">
           <option value="someValue1">someValue1</option>
           <option value="someValue2">someValue2</option>
</select>

または別のレベルのネストのためにこのように

<input type="checkbox" value="true"  name="Contacts[1].Reasons[2]"/>

もちろん、インデックスは動的です。

スコット・ハンゼルマンから基本的なアイデアを得ました...ここに

乾杯、T。

于 2013-02-13T12:32:09.533 に答える