所以我有这个演示项目几乎完全工作。帮助asp.net mvc的嵌套模型绑定
public class Project
{
public int ID { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Task> Tasks { get; set; }
}
public class Task
{
public int ID { get; set; }
[Required]
public string Name { get; set; }
public int ProjectID { get; set; }
public virtual Project Project { get; set; }
}
控制器
public ActionResult Edit(int id)
{
var project = db.Projects.Where(p=>p.ID==id).Single();
return View(project);
}
[HttpPost]
public ActionResult Edit(Project project)
{
if (ModelState.IsValid)
{
var dbProject = db.Projects.Where(p => p.ID == project.ID).Single();
UpdateModel(dbProject);
db.SaveChanges();
TempData["Success"] = "Modelo Valido";
}
return RedirectToAction("Index");
}
查看//强类型的项目
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Project</legend>
@Html.HiddenFor(model => model.ID)
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<h1>Tasks</h1>
@Html.EditorFor(m => m.Tasks)
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
EditorTemplate
@model MvcApplication2.Models.Task
<span>Task</span>
<br />
@Html.LabelFor(m => m.Name)
@Html.EditorFor(m => m.Name)
@Html.HiddenFor(m => m.ID)
@Html.HiddenFor(m => m.ProjectID)
@Html.ValidationMessageFor(m => m.Name)
视图显示此
的问题是,当我提出的任务是填充除了虚拟财产项目一切形式......所以错误我得到它是
操作失败:关系无法更改,因为 一个或多个外键属性是不可空的。当 更改为关系时,相关的外键属性 设置为空值。如果外键不支持空值, 新的关系必须定义,外键属性必须是 分配一个非空值,或者无关的对象必须 删除。
这里是我的断点调试结果的PIC
请帮助。
UPDATE:
我已经改变了我的控制器行动,这
[HttpPost]
public ActionResult Edit(Project project)
{
if (ModelState.IsValid)
{
db.Entry(project).State = EntityState.Modified;
db.SaveChanges();
TempData["Success"] = "Modelo Valido";
return RedirectToAction("Index");
}
return View(project);
}
它仍然无法正常工作。 现在对项目名称所做的更改在数据库中正确更新。但对任何任务名称所做的更改都会被完全忽略。
可以直接调用'db.Projects.Single(P =>页。 ID == project.ID);'没有'Where'。 –