我的模型有几个enum类型的属性。我使用新的MVC Html辅助方法调用EnumForDropDownList填充所有这些。其中一些是必需的,所以我添加了一个RequiredAttribute。不知怎的,我总是得到那些不需要的ModelState = false。我用调试器发现了这个:
当我查看Messages.resx文件时,我可以看到“不能为空”错误是针对RequiredAttribute:
<data name="PropertyValueRequired" xml:space="preserve">
<value>Cannot be empty</value>
</data>
知道我不明白
P.S。如果我在这些属性上选择一个值,那么问题就会消失。
编辑:这是模型:public class DocumentCitizen{
[Column("DOCID")]
public int? DocID { get; set; }
[Column("SOCIALCAT")]
public SocialCategory SocialCat { get; set; }
[Column("GENDER")]
public Gender Gender { get; set; }
[Column("APPTYPE")]
[Required(ErrorMessage="Please select the application type")]
public ApplicationType {get;set; }
}
答案 0 :(得分:2)
enum
类型无法设置为null
。如果您希望null
类型中包含enum
值,则必须将其声明为
public Nullable<YouEnum> MyProperty {get; set;}
答案 1 :(得分:1)
事实上@Gaurav是对的,我应该从一开始就知道它。如果属性类型是枚举,则表示它可以具有枚举值范围内的值。 (我不知道是不是在考虑属性获得无效值,我只是陷入了验证的问题)。为什么它得到无效值,在这种情况下是一个空字符串,是因为我重新配置了EnumDropdownListFor方法以将第一个项的值设置为空字符串。然后,当它尝试将该空字符串分配给具有自定义枚举类型的属性时,ModelState显然变为无效。我重新配置EnumDropdownListFor的原因是RequiredAttribute没有工作,即使我没有选择任何东西,第一个值被选中,因此没有引发vaidation错误。
为了克服这两个问题,我只是将枚举类型的所有属性的类型更改为可以为空的版本。这样两个必需属性都可以工作,我可以将null传递给没有必需属性的那些。