所以我有這個演示項目幾乎完全工作。幫助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'。 –