Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对';的验证失败;Id';领域_C#_Asp.net Mvc_Validation - Fatal编程技术网

C# 对';的验证失败;Id';领域

C# 对';的验证失败;Id';领域,c#,asp.net-mvc,validation,C#,Asp.net Mvc,Validation,我有一个简单的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; } } …我有这样一种观点(简化): 我得到一个模型验证错误 “Id字段是必需的。” 为什么会这样 默认情况下,Id字

我有一个简单的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; }
}
…我有这样一种观点(简化):

我得到一个模型验证错误

“Id字段是必需的。”

为什么会这样

默认情况下,
Id
字段被指定为0(应该是这样),然后它将被传递到数据层以创建记录,所以我不知道问题出在哪里


任何帮助都将不胜感激。

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

请确保
模型。SomeClassViewModel
类还具有类型和变量名称相同的
Id
字段

如果不是这样,您也可以尝试以下方法:

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

好的,我发现了问题所在

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

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


我希望这可以帮助可能有同样问题的人

“Id”字段何时/何处设置为0?您的Id字段是否是数据库中的标识字段?使Id为空可能会解决此问题,因为MVC可能需要值类型(int)的值,但如果Id真的应该为0(而不仅仅是null),您可能需要等待更好的答案最初。你能展示一下
SomeClassViewModel
类吗?您只显示了
SomeClass
模型,但没有显示视图为强类型的主视图模型。我猜您的表单中没有包含一些不可为空的字段。@MattJohnson我认为OP指的是ints将0作为默认赋值的事实。这不起作用,因为表单中的输入字段名前缀是
SomeClass。
。好吧,这很公平。只要
模型。SomeClassViewModel
具有
Id
字段,它就应该可以了。为什么将Id添加到视图模型类会阻止在模型类上发生验证错误?发生错误的可能性更大,因为
模型。SomeClassViewModel
无法绑定。
[HttpPost]
public ActionResult Add(Models.SomeClassViewModel model)
{
    if (ModelState.IsValid)
    {
        ...
    }
}
[HttpPost]
public ActionResult Add(SomeClass model)
{
    if (ModelState.IsValid)
    {
        ...
    }
}