我试图在表单中要求一个文本输入字段,这意味着表单中需要有一些内容。然而,添加一个[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 命名空间 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations%28v=vs.110%29.aspx.
在那里我更仔细地观察了Required
属性,并注意到AllowEmptyStrings财产 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.allowemptystrings%28v=vs.110%29.aspx。将其设置为false
告诉属性不允许任何空字符串。至少在某些版本中,这是默认行为,这是有道理的,因为Required
是要求输入一些内容,空字符串表示没有输入任何内容。如果它是默认值,您可能不需要添加它,但明确地说明这一点并没有什么坏处。
但这并不能解决问题,因为默认情况下空字符串被强制null
,它不是空字符串,因此是允许的。这似乎很荒谬,因为Required
应该测试是否输入了某些内容,并且null
表示没有输入任何内容。但是,那AllowEmptyStrings
页面有一个链接到DisplayFormAttribute
的财产ConvertEmptyStringsToNull http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayformatattribute.convertemptystringtonull%28v=vs.110%29.aspx。如果您将其设置为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; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)