1

新しい顧客を登録するために、データベース内の対応するテーブルを参照するビューにいくつかのパーシャルがあります。主キーは ID フィールドであるため、ビューに ID はありません。新しい顧客を挿入するには、3 つの住所 (訪問、郵便、連絡担当者) を挿入する必要があります。次に、契約の行、contact_person (既に挿入されている住所の 1 つからの addressId を使用) を挿入し、最後に新しい顧客の挿入に進みます。挿入されたばかりの訪問先住所、住所、契約者、連絡先を参照する外部キーが含まれます。

これらの部分ビューからのデータをオブジェクトとして CustomerController に渡し、そこでオブジェクトを処理するための最良/最も簡単な方法をお勧めできますか? 同様の状況を処理する例へのリンクも高く評価されます。

私のページの画像: http://i1345.photobucket.com/albums/p673/swell_daze/customer_registration_zps563341d0.png

テーブルの画像: http://i1345.photobucket.com/albums/p673/swell_daze/tables_zpsc60b644a.png

コードを表示:

@model CIM.Models.customer

<h2>Register new customer</h2>

@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
    <legend>New customer registration</legend>
    <fieldset class="span3">
    <legend>Basic information</legend>
    <div class="editor-label">
        @Html.LabelFor(model => model.name, "Name")
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.name)
        @Html.ValidationMessageFor(model => model.name)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.groupId, "Customer group")
    </div>
    <div class="editor-field">
        @Html.DropDownList("groupId", String.Empty)
        @Html.ValidationMessageFor(model => model.groupId)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.status, "Status")
    </div>
    <div class="editor-field">
    @Html.DropDownList("status")
        @Html.ValidationMessageFor(model => model.status)
    </div>
    </fieldset>

    <fieldset class="span3">
        <legend>Visiting address</legend>
        <div>
            @{
Html.RenderPartial("AddressPartial");
            }
        </div>
    </fieldset>

    <fieldset style="width:270px">
        <legend>Postal address</legend>
        <div>
            @{
Html.RenderPartial("AddressPartial");
            }
        </div>
    </fieldset>

    <fieldset class="span3">
    <legend>Contract</legend>
    <div>
    @{
Html.RenderPartial("ContractPartial");
        }
    </div>
    </fieldset>

    <fieldset class="span3" style="width:540px">
    <legend>Contact person</legend>
    <div>
    @{
Html.RenderPartial("ContactPersonPartial");
        }
    </div>
    <p>
        <input type="submit" class="btn btn-success" value="Submit" style="margin-right:1em"/>
        @Html.ActionLink("Cancel", "Index", "Customer", new {@class="btn btn-danger", @type="button"})
    </p>
    </fieldset>
</fieldset>

}

4

1 に答える 1

0

ビューデータをビューモデルにラップできます。データを送信すると、次のようにビューモデルにマップされます。

ビューモデルを作成します。

public class MyViewModel
{
    public string name { get; set; }
    public string someprop1 { get; set; }
    public string someprop2 { get; set; }

    public MyAddress visitingaddress { get; set; }
    public MyAddress postaladdress { get; set; }
    public MyContactAddress contactaddress { get; set; }
}

public class MyAddress
{
    public string town { get; set; }
    public string street { get; set; }
    public string housenumber { get; set; }
    public string postalcode { get; set; }
}

public class MyContactAddress : MyAddress
{
    public string firstname { get; set; }
    public string lastname { get; set; }
    public string email { get; set; }
    public string phonenumber { get; set; }
}

これまでと同じようにビューを作成しますが、現在使用しているモデル (CIM.Models.customer) の代わりにビューモデルを使用し、パーシャルで、たとえば郵便番号のパーシャル ビューで次のようにします。

.......
@Html.EditorFor(x => x.postaladdress.town)
......

ビューモデルを使用してコントローラー アクションを作成します。

    public ActionResult Index()
    {
        MyViewModel vm = new MyViewModel();
        //doing something here....

        return View(vm);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel vm)
    {
        //save your data, here your viewmodel will be correctly filled
        return View(vm);
    }

お役に立てれば

于 2013-05-03T22:39:28.483 に答える