ASP.MVC 4 と Code First バインディングの子コレクションを理解できないようです。子コレクションに関しては、モデル オブジェクトが null であるというエラーが常に発生します。モデルがnullであるため、子コレクションがnullであるかどうかのチェックを追加することさえできません。
Batch オブジェクトを作成してそれにステップを追加すると、コントローラーで動作することを確認しました。
これは簡単なことだと思いますが、わかりません。
ここに私のオブジェクトがあります:
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>
}