0

1) 学生と 2) 住所の 2 つのエンティティがあります。

public class Student 
{
    Public Int StudentId { get; set; }
    Public String FullName { get; set; }

    Public virtual IList<Address> Addresses { get; set; }
}

public class Address
{
    Public Int AddressId { get; set; }
    Public Int StudentId { get; set; }
    Public String FullAddress { get; set; }

    Public virtual Student Student { get; set; }
}

各学生は、0 個以上のアドレスを持つことができます。

この 2 つのエンティティに対して単一のビューを作成したいと考えています。ビューモデルを作成する必要があることはわかっています。これはビューモデルです。

public class StudentViewModel
{
    Public Int StudentId { get; set; }
    Public String FullName { get; set; }
    public Address AddAddressModel { get; set; }

    Public virtual IList<Address> Addresses { get; set; }
}

そして、StudentViewModel のビューを作成します。これは StudentViewModel です。

@model MyProject.Models.StudentViewModel

@{
    ViewBag.Title = "Create";
 }

 @using (Html.BeginForm ())
 {
     @Html.ValidationSummary(true)

    <fieldset>

        <div class="editor-label">
            @Html.LabelFor(model => model.FullName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FullName)
            @Html.ValidationMessageFor(model => model.FullName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.AddAddressModel.FullAddress)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.AddAddressModel.FullAddres)
            @Html.ValidationMessageFor(model => model.AddAddressModel.FullAddres)
        </div>

        <button id="add">add address to list</button>

        <input type="submit" value="save in database" />        
</fieldset>

StudentViewModelのAddressesプロパティに1つ以上のアドレスを1つずつ追加し、この操作後にユーザーに表示する方法を教えてください。最後に、「データベースに保存」ボタンをクリックすると、学生と彼の住所がデータベースに挿入される必要があります。

4

2 に答える 2

1

私は過去にネストされた子エンティティを送信しましたが、それは常に API 呼び出しで行われ、フォームは送信前に JSON オブジェクトにシリアル化されました。

実際には複数の値しか必要ないためFullAddress、それに応じてモデルとビューを変更できます (テストされていません)。

モデル:

public class StudentViewModel
{
    public int StudentId { get; set; }
    public string FullName { get; set; }
    public string[] Addresses { get; set; }
}

意見:

ビューで [追加] ボタンをクリックすると、(JavaScript を介して) 次のようになることを確認します。

<textarea name="Addresses[]">Some Address 1</textarea>
<textarea name="Addresses[]">Some Address 2</textarea>
etc...
于 2013-02-22T13:06:04.943 に答える
0

次を使用して試すことができます:

@EditorFor(m => model.Addresses)

これにより、住所モデルのテンプレートが作成されます

于 2013-02-22T13:07:48.770 に答える