まず第一に、私の英語について申し訳ありません。私の自然言語ではありません。
Category
以下のコードのような名前のクラスがあります。このコードにはCategory
、父親のカテゴリを参照できるプロパティもあることに注意してください。これは、クラス内で宣言されたものとまったく同じクラスです。インセプションのように。したがって、このFather Categoryオブジェクトには、「彼を宣言したクラス」と同じプロパティがあります。
プロパティName
は必須です。このプロパティを覚えておいてください。
public class Category
{
public int? Id{ get; set; }
[DisplayName("Father Category")] //NOT REQUIRED
public Category Father { get; set; }
[DisplayName("Category")]
[Required(ErrorMessage = "Name is required")] //REMEMBER THIS REQUIRED PROPERTY!!
public string Name { get; set; }
[DisplayName("Status")]
public bool Status { get; set; }
[DisplayName("Description")]
public string Description { get; set; }
}
それが私のクラスです。
したがって、カテゴリビューでは、次のようなことができます。
注:CompleteEditorFor
とCompleteDropDownListFor
は、レイアウトを調整するためだけに、各フィールドにHTMLを追加する拡張メソッドです。
@using (Html.BeginForm(null, null, FormMethod.Post))
{
@Html.CompleteEditorFor(x => x.Name)
@Html.CompleteEditorFor(x => x.Description)
@Html.CompleteEditorFor(x => x.Status)
@Html.CompleteDropDownListFor(x => x.Father.Id, ViewData["Categories"], "Id", "Name", "Select...")
@Html.SubmitButton()
}
上記のコードは問題なく実行されます。
今問題があります:
[保存]ボタンをクリックすると、が作成されます。HttpPost
これはそのAction
ためのものです。
(以下のコードには、いくつかの変更されたメッセージ文字列と拡張メソッドがあります。)(CategoriesBLL
データベースからカテゴリを取得するクラスです。)
[HttpPost]
public ActionResult New(Category item)
{
ViewData.Add("Categories", CategoriesBLL.select());
try
{
if (ModelState.IsValid)//PROBLEM IS HERE!!!!!!!!!
{
if (CategoryBLL.insert(item) != 0)
{
ViewData.AddSuccess("Some Success Message");
return View(new Category());
}
else
{
ModelState.AddError("Some error message");
return View(item);
}
}
else
{
ModelState.AddError("Some SERIOUS error message");
return View(item);
}
}
catch (Exception ex)
{
ModelState.AddError("Some EVEN MORE SERIOUS message");
return View(item);
}
}
問題はif (ModelState.IsValid)
ラインにあります。
なんで?
私のCategory
クラスには。という必須のプロパティがあるためですName
。私がしていることをするのにこのプロパティは必要ありません。必要なのId
はFather
プロパティのだけです。Id
ビューのこの行でこれを取得できます:
@Html.CompleteDropDownListFor(x => x.Father.Id, ViewData["Categories"], "Id", "Name", "Select...")
そしてそれはうまくいきます。
ただし、Name
プロパティはnull
であり、必須ですが、Childクラスに通知する場合にのみ必須です。父のクラスではありません。
GoogleやStackOverflowで検索する方法すら知りません...
誰か助けてもらえますか?