これについての洞察をいただければ幸いです: 次のコード
[HttpPost]
public ActionResult Edit(BeamCollection beamcollection)
{
if (ModelState.IsValid)
{
beamcollection.BeamMaterial = db.Types.Find(Convert.ToInt32(Request.Form.Get("BeamMaterial_ID")));
db.Entry(beamcollection).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Details", "Bridge");
}
return View(beamcollection);
}
BeamCollection レコードを変更しようとすると、DropDownList から選択した値を取得する beamcollection.BeamMaterial を除いて、すべての変更が反映されて DB に保存されます。デバッグすると、選択した値が beamcollection.BeamMaterial に割り当てられていることがわかります!
ちなみに、このフィールドは次のように定義されています
public virtual AllTypes BeamMaterial { get; set; }
つまり、AllTypes との 1 対多の関係を反映していますが、これは単方向の関係です。
(私にとって)奇妙なことは、作成アクションに同じ手法が使用され、完全に機能することです。
public ActionResult Create(BeamCollection beamcollection)
{
if (ModelState.IsValid)
{
beamcollection.BridgeInfo = db.Bridges.Find(bridgeID);
beamcollection.BeamMaterial = db.Types.Find(Convert.ToInt32(Request.Form.Get("BeamMaterial_ID")));
db.BeamCollections.Add(beamcollection);
db.SaveChanges();
return RedirectToAction("Details", "Bridge");
}
return View(beamcollection);
}
なぜこれが起こっているのか、どうすればうまくいくのか、助けてください。