2
我似乎無法理解ASP.MVC 4和Code First綁定中的子集合。對於子集合,我總是會得到一個模型對象爲null的錯誤。我甚至無法添加檢查,如果子集合爲空,因爲模型爲空。模型的子集合總是空的
我已經驗證,在控制器中,如果我創建一個批對象並向它添加步驟,那麼它將工作。
我敢肯定這是簡單的,但我無法弄清楚。
這裏是我的對象:
public class Batch
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual string Details { get; set; }
public virtual ICollection<Step> Steps { get; set; }
}
public class Step
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual int Days { get; set; }
public virtual Batch Batch { get; set; }
}
這裏是我的控制器操作:
[Authorize]
public ActionResult Create()
{
return View();
}
這是我的觀點:
@model BC.Models.Batch
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Batch</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Details)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.Details)
@Html.ValidationMessageFor(model => model.Details)
</div>
<div>
<h3>Steps</h3>
// Here is where I get a error that model is null
@if(model.Steps != null)
{
foreach(var item in model.Steps)
{
@Html.EditorFor(model => item)
}
}
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
我完成了您在Create操作中編寫的內容,並且它引發了相同的編譯器錯誤。編譯器錯誤消息:CS0103:當前上下文中不存在名稱'model' –
好吧,在我看來,我將小寫模型更改爲大寫模型,並且它與控制器操作中更改傳遞新批次。響應的第二部分,構造函數中集合的設置不起作用。出現以下錯誤:無法設置'Batch_E85AD838AF575CFACF76B82A41844C5D89E88CB62530C4C26D5F390441401D29'類型的屬性'Steps',因爲該集合已被設置爲EntityCollection。 –
@Brian這是一個實體框架錯誤,可能發生在您的存儲庫/上下文中,不是嗎?它暗示了在屬性上使用「虛擬」關鍵字時創建的更改跟蹤代理的問題。另一個問題完全。 –