0
public class EmployeeViewModel
    {
        public Employee Employee { get; set; }
        public IList<Address> Addresses { get; set; }
    }

コントローラー:-

[HttpPost]
    public ActionResult InsertAddress(EmployeeViewModel model)
    {
           //code for insert data into db
    }

意見 :- ここに画像の説明を入力

ここでは、複数の住所オブジェクトと単一の従業員オブジェクトをビューからコントローラーに渡すことにより、InsertAddress アクションを呼び出したいと考えています。

出来ますか ?

4

3 に答える 3

3

モデル バインダーが理解できるように、正しい命名規則を使用する必要があります。

プロパティ.プロパティ

または

Property[index].コレクションのプロパティ

インデックスがシーケンシャル 0 ベースでない場合は、インデックスの値を持つ隠しフィールド Property.Index を追加する必要があります

例:

<input name="Employee.Name" value="1234 5678"/>
<input name="Employee.Phone value="1234 5678"/>
<input name="Employee.Email" value="me@example.com"/>
<input name="Addresses.Index" value="0" type="hidden"/>
<input name="Addresses[0].Suburb" value="Melbourne"/>
<input name="Addresses[0].Postcode" value="3000"/>
<input name="Addresses.Index" value="1" type="hidden"/>
<input name="Addresses[1].Suburb" value="Sydney"/>
<input name="Addresses[1].Postcode" value="2000"/>

行を挿入するときは、命名規則を使用するだけで、.Index フィールドを追加することを忘れないでください。

Address クラスのカスタム EditorTemplate を作成すると、ほとんどのデフォルトの EditorFor がこれらすべてを透過的に処理します。

于 2013-01-31T13:35:03.747 に答える
2

はい、可能ですが、少し作業が必要です。

モデルの単一のビュー (住所のループのようなもの) を用意するのではなく、Address クラスの EditorTemplate を作成し、メイン ビューで使用する必要があります。@Html.EditorFor(m => m.Addresses)

このセットアップにより、EmployeeViewModelインスタンスは、(空ではなく) アドレスの完全なリストを含むアクションに返されます。

于 2013-01-31T13:33:43.420 に答える