Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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
Asp.net mvc 未添加必需的属性,但ModelState仍然为false_Asp.net Mvc_Requiredfieldvalidator_Modelstate - Fatal编程技术网

Asp.net mvc 未添加必需的属性,但ModelState仍然为false

Asp.net mvc 未添加必需的属性,但ModelState仍然为false,asp.net-mvc,requiredfieldvalidator,modelstate,Asp.net Mvc,Requiredfieldvalidator,Modelstate,我有一个模型,它有几个类型为enum的属性。我使用新的MVC Html帮助程序方法调用EnumForDropDownList来填充所有这些文件。其中一些是必需的,因此我添加了一个RequiredAttribute。不知何故,对于那些不需要的,我总是得到ModelState=false。我通过调试器发现了这一点: 当我查看Messages.resx文件时,我可以看到“不能为空”错误是针对RequiredAttribute的: <data name="PropertyValueRequi

我有一个模型,它有几个类型为enum的属性。我使用新的MVC Html帮助程序方法调用EnumForDropDownList来填充所有这些文件。其中一些是必需的,因此我添加了一个RequiredAttribute。不知何故,对于那些不需要的,我总是得到ModelState=false。我通过调试器发现了这一点:

当我查看Messages.resx文件时,我可以看到“不能为空”错误是针对RequiredAttribute的:

  <data name="PropertyValueRequired" xml:space="preserve">
    <value>Cannot be empty</value>
  </data>

enum
类型不能设置为
null
。如果希望在
enum
类型中具有
null
值,则必须将其声明为

public Nullable<YouEnum> MyProperty {get; set;}
public可为空的MyProperty{get;set;}

事实上@Gaurav是对的,我从一开始就应该知道这一点。如果属性类型为enum,则表示它可以具有枚举值范围内的值。(不知何故,我没有想到属性会得到一个无效的值,我只是被验证问题卡住了)。为什么会得到无效值,在本例中是空字符串,是因为我重新配置了EnumDropdownListFor方法,将第一个项的值设置为空字符串。然后,当它试图将该空字符串分配给具有自定义枚举类型的属性时,ModelState显然变得无效。我重新配置EnumDropdownListFor is RequiredAttribute的原因是,即使我没有选择任何内容,也没有选择第一个值,因此没有引发任何验证错误


为了克服这两个问题,我只是将所有enum类型的属性的类型更改为可为null的版本。这样,必需属性都可以工作,我可以将null传递给那些没有必需属性的对象。

它不是null,是空字符串。(“)“Enum”属性不能设置为空字符串或null。该消息意味着通知该属性的值不能为空,即“null”,您也可以发布您的模型吗?
public Nullable<YouEnum> MyProperty {get; set;}