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(因为它应该),然后它将被传递到数据层进行记录创建,所以我看不出问题是什么?

Id'验证失败;字段

好了,我找到问题了。

在我的视图模型类('SomeClassViewModel')的构造函数中,我添加了一行代码来调用'SomeClass'属性的默认构造函数。

我通过检查'Id'验证键的ModelState错误发现了这一点,并看到'AttemptedValue'属性是一个空字符串,它应该是0。将此属性实例化为'SomeClass'的实例可以修复此问题。

我希望这可以帮助别人可能在相同的问题!

如果更改Id变量的名称或将数据类型更改为字符串会发生什么?

确保Models.SomeClassViewModel类中也有相同类型和变量名的Id字段

如果不是这样,你也可以这样做:

[HttpPost]
public ActionResult Add(SomeClass model)
{
    if (ModelState.IsValid)
    {
        ...
    }
}