我有一个简单的MVC模型:
public class SomeClass
{
public int Id { get; set; }
[Required(ErrorMessage = "Please provide a name for the blah blah blah")]
public string Name { get; set; }
}
...我有一个像这样的观点(简化):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CompanyName.Web.Models.SomeClassViewModel>" %>
<form method="post" action="/someclass/add">
<%=Html.HiddenFor(m => m.SomeClass.Id)%>
<div>
<%=Html.LabelFor(m => m.SomeClass.Name)%>
<%=Html.TextBoxFor(m => m.SomeClass.Name, new { @class = "form-medium" })%>
</div>
</form>
在表单提交上,我的控制器验证ModelState
,如此:
[HttpPost]
public ActionResult Add(Models.SomeClassViewModel model)
{
if (ModelState.IsValid)
{
...
}
}
我得到
的模型验证错误“Id字段是必需的。”
为什么会这样?
默认情况下Id
字段被分配为0(应该如此),然后它将被传递到数据层以便创建记录,所以我看不出问题是什么?
任何帮助都将不胜感激。
答案 0 :(得分:0)
如果更改为Id变量的名称或将数据类型更改为字符串会怎样?
答案 1 :(得分:0)
确保Models.SomeClassViewModel
类还具有相同类型和变量名称的Id
字段。
如果不是这种情况,你也可以试试这个:
[HttpPost]
public ActionResult Add(SomeClass model)
{
if (ModelState.IsValid)
{
...
}
}
答案 2 :(得分:0)
好的,所以我发现了问题。
在我的视图模型类('SomeClassViewModel')的构造函数中,我添加了一行代码,调用了'SomeClass'属性的默认构造函数。
我通过检查'Id'验证密钥的ModelState错误来解决这个问题,并看到'AttemptedValue'属性是一个空字符串,它应该是0.将此属性实例化为'SomeClass'的实例修好了。
我希望这可以帮助某人解决同样的问题!