私はMVC 3を学び始めたばかりで、何かを達成するための最良の方法についてアドバイスをすることができます.
テキストとタグ オブジェクトのコレクションを含むブログ投稿を作成できる基本的なシナリオがあります。各ブログには複数のタグを付けることができ、各タグは複数のブログに添付できます。
public class BlogPost
{
public int ID { get; set; }
public string BlogText { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public int ID { get; set; }
public string TagText { get; set; }
public virtual ICollection<BlogPost> Blogs { get; set; }
}
これにより、id が期待する結合テーブルを持つ 2 つのモデル テーブルが作成されます。
BlogPost モデルの作成ビューにセクションを追加して、一連のタグを追加、編集、および削除できるようにする最善の方法は何ですか? (インデックス ビューのように)
私の最初の考えは、Model.Tags プロパティを通過するタグ オブジェクトの部分ビューを使用することでしたが、Model プロパティが null のように見えます。これは良い方法ですか、それとももっと良い方法がありますか?
わかりましたので、ビューを作成するアクションは生成された標準のものです:
// GET: /Blog/Create
public ActionResult Create()
{
return View();
}
ビューコードは次のとおりです。
@model MVC_ManyToManyTest.Models.BlogPost
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>BlogPost</legend>
<div class="editor-label">
@Html.LabelFor(model => model.BlogText)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.BlogText)
@Html.ValidationMessageFor(model => model.BlogText)
</div>
<div id="HolderForPartialView">
@Html.Partial("ViewUserControl1", Model.Tags);
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
作成される部分ビューは次のとおりです。
@model IEnumerable<MVC_ManyToManyTest.Models.Tag>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
TagText
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.TagText)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
</table>
私の問題
部分ビューをロードすると、次の行で null 参照が取得されます。
@Html.Partial("ViewUserControl1", Model.Tags);
モデル オブジェクトが null です