私は2つのテーブルInvoicesとCustomersを持つdbを持っています。得意先コードPKは、請求書テーブルでFKです。私は、ユーザーが請求書データを入力するCreateビューを持っています。このフォームには、@ Html.DropDownListがあり、SelectListにはdbカスタマにすでに存在する名前が設定されています。ユーザーの選択の顧客データフィールドに基づいて部分図を経由してデータベースから顧客データをautopopulatedされています。これはうまく動作しますが、私は送信ボタンを作成するとき、それは中cutomerの新しいインスタンスを作成しますMVC 3 EF - 既存のデータを使用して新しいレコードを追加する
@using (Ajax.BeginForm("CustomerSelect", "Invoice", new AjaxOptions{
HttpMethod = "GET",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "CustomerFields"}))
データベースから取得したidのIDを使用する必要があります。
<div class="editor-label">
@Html.LabelFor(model => model.Customer)
<div class="editor-field">
@Html.EditorFor(model => model.Customer)
@Html.ValidationMessageFor(model => model.Customer)
</div>
</div>
をしかし、私はのcontrolerのhttppostに請求書オブジェクトの内部を見るとき、それは別の(新しい)顧客IDをそれぞれ示す方法を作成します:部分図を作成してビューに表示されている場合には、適切な顧客IDをdisplayes
[HttpPost]
public ActionResult Create(Invoice invoice)
{
if (ModelState.IsValid)
{
db.Invoices.Add(invoice); **//invoice.Customer.CustomerID == 1**
db.SaveChanges(); **//invoice.Customer.CustomerID changes to next free in the db == 7**
return RedirectToAction("Index");
}
return View(invoice);
}
私は間違っていますか?
どちらの方法はあなたに多くのことを感謝し、私のために素晴らしい仕事! – Eric