c# - 如何使用数据注释属性类来使表单中的空字符串失效?

标签 c# forms validation asp.net-mvc-4

我试图在表单中要求一个文本输入字段,这意味着表单中需要有一些东西。但是,向我的模型添加 [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/

相关文章:

php - 向 Codeigniter 表单验证添加自定义回调

angular - 应用错误类并在提交表单后显示不正确字段的相关验证消息? Angular 2

javascript - 如何将带有输入图像的表单提交到模态 Bootstrap 中?

php - 如何从用户获取多行输入并在 PHP 中显示相同内容

c# - 如何将对象转换为带有格式字符串的字符串?

c# - 如何在没有本地化的情况下在 C# 中获取日期

javascript - jQuery:同一页面上两个相同表单的提交功能

javascript - 需要一个正则表达式来检查字符串中的 "2 alphabets and 4 numeric"

c# - 在动态范围内寻找局部最大值

c# - Take() 是否强制 LINQ 枚举结果 IEnumerable?