Id'验证失败;字段
本文关键字:失败 字段 验证 Id | 更新日期: 2023-09-27 18:01:18
我有一个简单的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(因为它应该),然后它将被传递到数据层进行记录创建,所以我看不出问题是什么?
好了,我找到问题了。
在我的视图模型类('SomeClassViewModel')的构造函数中,我添加了一行代码来调用'SomeClass'属性的默认构造函数。
我通过检查'Id'验证键的ModelState错误发现了这一点,并看到'AttemptedValue'属性是一个空字符串,它应该是0。将此属性实例化为'SomeClass'的实例可以修复此问题。
我希望这可以帮助别人可能在相同的问题!
如果更改Id变量的名称或将数据类型更改为字符串会发生什么?
确保Models.SomeClassViewModel
类中也有相同类型和变量名的Id
字段
如果不是这样,你也可以这样做:
[HttpPost]
public ActionResult Add(SomeClass model)
{
if (ModelState.IsValid)
{
...
}
}