鉴于这些 POCO 类
class MainClass{
[Key] int id {get;set;}
public string name {get;set;}
[Required]
public virtual ICollection<SubItem> subItems {get;set} // unique sub items
}
和
Class SubItem{
[Key] int id {get; set;}
public string name {get;set;}
[Required] // required is nedded. the subitem cannot exist by it's self
public MainClass parent {get; set;}
}
将其发布并绑定到控制器时,一切都设置好了,我将所有 SubItems 状态设置为:
public virtual ActionResult Edit([Bind()] MainClass entity) {
foreach(var subItem in entity.subItems)
db.Entry(subItem).State = System.Data.Entity.EntityState.Modified;
if (ModelState.IsValid) { // Fails here
db.Entry(entity).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Edit", new { edited = "true" });
}
}
但是,modelState 包含每个项目的“父级不能为空”错误。并且验证失败。由于某种原因,“父”属性不会自动填充。我怎样才能避免它?
我正在渲染这样的视图。
@model MainClass
@Html.HiddenFor(m=>m.id)
@Html.EditorFor(m=>m.name)
@Html.EditorFor(m=>m.subItems)
SubItem 在哪里休耕EditorTemplate
@model SubItem
@Html.HiddenFor(m=>m.id)
@Html.EditorFor(m=>m.name)
并且[Required] parent
由于级联删除而需要。
没有[Required]
一切都很好。并且在保存 db 时添加 parent 属性。但是,级联删除在迁移时关闭。