私はMVC4とEF5のコードファーストを使用しています。外部キーを持つ行を参照して新しいデータレコードを作成するときに、外部キー行のフィールドがnullに設定されるという問題があります。
簡略化したシナリオは次のとおりです。
public class Person
{
string name { get; set; }
Color color { get; set; }
}
public class Color
{
int id { get; set; }
string name { get; set; }
}
ビューモデル:
public class PersonViewModel
{
public Person Person { get; set; }
public IEnumerable<SelectListItem> Colors { get; set; }
public PersonViewModel()
{
Context db = new Context();
Colors = db.Colors.ToList().Select(t => new SelectListItem() { Text = t.Name, Value = t.Id.ToString() });
}
}
コントローラー:
public ActionResult Create()
{
return View(new PersonViewModel);
}
[HttpPost]
public ActionResult Create(PersonViewModel personViewModel)
{
if (ModelState.IsValid)
{
db.Person.Add(personViewModel.Person);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(personViewModel);
}
そして最後に、ビューの作成:
@model PersonViewModel
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
@Html.LabelFor(model => model.Person.Name)
@Html.EditorFor(model => model.Person.Name)
@Html.LabelFor(model => model.Person.Color)
@Html.DropDownListFor(model => model.Person.Color.Id, this.Model.Colors)
<input type="submit" value="Create" title="Create ticket" />
}
データに2つの色があるとします:1。赤2.青
ビューから新しい人物を作成し、色として青を選択すると、人物は正しく作成されますが、カラーテーブルのID 2の「青」はID(2)を維持しますが、名前は空に設定されます。
ここで拘束力のある問題が発生していると思いますか?これはフレームワークで標準としてサポートされるべきですか、それとも独自のモデルバインダーを作成する必要がありますか?
ありがとう