DCS*_*non 26 c# forms validation asp.net-mvc-4
我试图在表单中要求一个文本输入字段,这意味着表单中需要有一些东西.但是,[Required]在我的模型中添加标签不起作用.具体来说,查看User Name属性:
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; }
}
Run Code Online (Sandbox Code Playgroud)
这允许空字符串通过模型验证,并在尝试为用户名插入NULL值时最终引发数据库错误.
如何更改这些属性,以便他们执行他们应该执行的操作?
DCS*_*non 67
经过大量谷歌搜索并查看Stackoverflow后,我什么都没有.
我去了MSDN并查看了System.ComponentModel.DataAnnotations命名空间.
在那里,我仔细查看了Required属性,并注意到了AllowEmptyStrings属性.将其设置为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; }
}
Run Code Online (Sandbox Code Playgroud)
我将实现一个像这样的新验证属性并将其应用于我的模型.
public class RequiredNotEmptyAttribute : RequiredAttribute
{
public override bool IsValid(object value)
{
if(value is string) return String.IsNullOrEmpty((string)value);
return base.IsValid(value);
}
}
Run Code Online (Sandbox Code Playgroud)
这只适用于服务器端(客户端仍然只检查null).
| 归档时间: |
|
| 查看次数: |
32093 次 |
| 最近记录: |