私はasp.net mvc 3の初心者なので、内部プロセスについて十分な知識がありません。Get および Post メソッドとして新しいカテゴリを作成する 2 つのアクションがあります。
public ActionResult Create()
{
List<Category> cat = this.display_children(null, 0);
List<SelectListItem> items = new SelectList(cat, "ID", "CategoryName").ToList();
items.Insert(0, (new SelectListItem { Text = "root", Value = "" }));
ViewBag.ParentCategoryID = items;
return View();
}
[HttpPost]
public ActionResult Create(Category category)
{
if (ModelState.IsValid)
{
db.Categories.AddObject(category);
db.SaveChanges();
return RedirectToAction("Index");
}
List<Category> cat = this.display_children(null, 0);
List<SelectListItem> items = new SelectList(cat, "ID", "CategoryName").ToList();
items.Insert(0, (new SelectListItem { Text = "root", Value = "" }));
ViewBag.ParentCategoryID = items;
return View(category);
}
以下はビューです:
@model IVRControlPanel.Models.Category
@{
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>Category</legend>
<div class="editor-label">
@Html.LabelFor(model => model.CategoryName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CategoryName)
@Html.ValidationMessageFor(model => model.CategoryName)
</div>
<div class="editor-label">
@Html.Label("Select Category")
</div>
<div>
@*@Html.DropDownList("CategoryList",new SelectList(ViewBag.Categories))*@
@Html.DropDownList("ParentCategoryID", ViewBag.ParentCategoryID as SelectList)
@Html.ValidationMessageFor(model => model.ParentCategoryID)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
問題: カテゴリ名フィールドに入力せずに作成ボタンをクリックすると、次の例外がスローされます。
This property cannot be set to a null value.
Visual Studio がデバッグ モードの場合にのみ例外がスローされ、デバッグを続行すると、検証メッセージにエラーのみが表示されます。ここで、実際に必要なのは、デバッグモードではない間は問題ない例外をスローせずにエラーを表示することです。データベースに次のカテゴリ テーブル列があり、モデル ファースト アプローチ エンティティ フレームワークを使用します。
- ID -> 主キーとアイデンティティ、整数
- CategoryName -> null 非許容、varchar(50)
- ParentCategoryID -> Nullable
私はasp.net mvc 3が苦手で、何が問題なのかわかりません。