私は 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つだけ取ることでおそらく機能することはわかっていますが、これは私のプロジェクトのオプションではありません。