我正在使用 MVC4 和 EF5 代码优先。我有一个问题,即在引用具有外键的行创建新数据记录时,外键行的字段设置为空。
这是一个简化的场景:
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" />
}
假设我在数据中有两种颜色:1. 红色 2. 蓝色
当通过视图创建一个新人并选择蓝色作为颜色时,该人将被正确创建,但颜色表中 ID 为 2 的“蓝色”将保持其 ID(为 2),但其名称将设置为空。
我确定这里发生了绑定问题?这应该作为框架中的标准支持还是我需要创建自己的模型绑定器?
谢谢