我试图在表单中要求一个文本输入字段,这意味着表单中需要有一些东西。但是,向我的模型添加 [Required]
标记不起作用。具体来说,查看用户名属性:
public class ColumnWidthMetaData {
[DisplayName("Column Name")]
[Required]
public string ColName { get; set; }
[DisplayName("Primary Key")]
public int pKey { get; set; }
[DisplayName("User Name")]
[Required]
public string UserName { get; set; }
[DisplayName("Column Width")]
[Required]
public int Width { get; set; }
}
这允许空字符串通过模型验证,并最终在它尝试为用户名插入 NULL 值时引发数据库错误。
我怎样才能改变这些属性,使它们看起来像它们应该做的那样?
最佳答案
在大量谷歌搜索和 Stackoverflow 上查看之后,我一无所获。
我去了 MSDN 并查看了 System.ComponentModel.DataAnnotations Namespace .
我仔细查看了 Required
属性,注意到 AllowEmptyStrings
property .将此设置为 false
告诉属性不允许任何空字符串,我认为这是默认行为,因为 Required
的要点是要求某些东西被输入,空字符串表示没有输入任何内容。
但这并没有解决问题,因为默认情况下空字符串被强制为 null
,这不是空字符串,因此是允许的。这又一次是荒谬的,因为 Required
应该测试是否输入了某些内容,而 null
表示没有输入任何内容。但是,AllowEmptyStrings
页面有一个指向 DisplayFormAttribute
属性 ConvertEmptyStringsToNull
的链接.如果将此设置为 false
,则空字符串将保持为空字符串,然后所需的标记将不允许它们。
所以,这是解决方法:
public class ColumnWidthMetaData {
[DisplayName("Column Name")]
[Required(AllowEmptyStrings=false)]
[DisplayFormat(ConvertEmptyStringToNull=false)]
public string ColName { get; set; }
[DisplayName("Primary Key")]
public int pKey { get; set; }
[DisplayName("User Name")]
[Required(AllowEmptyStrings=false)]
[DisplayFormat(ConvertEmptyStringToNull=false)]
public string UserName { get; set; }
[DisplayName("Column Width")]
[Required]
public int Width { get; set; }
}
关于c# - 如何使用数据注释属性类来使表单中的空字符串失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939738/