1

私は MVC の初心者で、現在 Web プロジェクトで MVC 4 + EF Code First と WCF を使用しています。基本的に、私のプロジェクトでは、WCF サービスがデータベースからデータを取得し、データの更新も処理します。その結果、レコードの更新が終了したら、サービス クライアントを呼び出して、「従来の」MVC の方法以外で変更を行う必要があります。ここに私のサンプルコードがあります:

モデル:

[DataContract]
public class Person
{
    [Key]
    [DataMember]
    public int ID{ get; set; }

    [DataMember]
    public string Name{ get; set; }

    [DataMember]
    public string Gender{ get; set; }

    [DataMember]
    public DateTime Birthday{ get; set; }
}

コントローラ:

    [HttpPost]
    public ActionResult Detail(int ID, string name, string gender, DateTime birthday)
    {
        // get the WCF proxy
        var personClient = personProxy.GetpersonSvcClient();

        //update the info for a person based on ID, return true or false
        var result = personClient.Updateperson(ID, name, gender, birthday);

        if (result)
        {
            return RedirectToAction("Index");
        }
        else
        {
            //if failed, stay in the detail page of the person
            return View();
        }
    }

意見:

@model Domain.person

@{
    ViewBag.Title = "Detail";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Detail</h2>
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

<fieldset>
    <legend>Person</legend>

    @Html.HiddenFor(model => model.ID)

    <div class="editor-label">
        @Html.LabelFor(model => model.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.Gender)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Gender)
        @Html.ValidationMessageFor(model => model.Gender)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Birthday)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Birthday)
        @Html.ValidationMessageFor(model => model.Birthday)
    </div>
    <p>
        <input type="submit" value="Update"/>
    </p>
</fieldset>

}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

コントローラーは私が混乱している部分です。Detail 関数は複数のパラメーターを取ります。ビューから呼び出すにはどうすればよいですか? また、コントローラーのこの戻りフィールドに何を入力する必要がありますか:

//if failed, stay in the detail page of the person
return View();

通常はモデルを入れますが、WCF サービスからデータベースを直接更新しているため、モデルは変更されていないようです。

どんな提案でも大歓迎です!

更新: 更新メソッドを変更して、モデル自体であるパラメーターを1つだけ取ることでおそらく機能することはわかっていますが、これは私のプロジェクトのオプションではありません。

4

2 に答える 2

0

「更新」を押したときに、コントローラーで詳細アクションを呼び出します

//sidenote : 関数内で値を受け入れる単一のパラメーターを使用すると、作業が楽になります

于 2013-02-27T16:44:04.253 に答える
0

フォームは、送信時にビューをレンダリングした get メソッドと同じ名前を持つコントローラーの post メソッドを呼び出します。

BeginFormメソッドでパラメーターを指定することにより、このデフォルトの動作を変更できます。

@using (Html.BeginForm("SomeAction", "SomeController")) 

また、強く型付けされたビューを使用しているため (良い!)、モデル オブジェクトを受け入れるように post メソッドのシグネチャを変更できます。

 [HttpPost]
 public ActionResult Detail(Person person)
于 2013-02-27T16:56:38.663 に答える