首先,对不起我的英语。不是我的自然语言。
我有一个名为Category
如下代码的类。请注意,在此代码中,我还有一个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()
}
上面的代码运行得很好。
现在问题来了:
当我单击 Save 按钮时,它会生成一个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 上搜索它...
谁能帮我?