c# – 为标有PhoneAttribute或UrlAttribute的字段允许空字符串 - 代码日志

c# – 为标有PhoneAttribute或UrlAttribute的字段允许空字符串

我使用CodeFirst Entitty框架5.我有一个代表用户的类。

public class User
{
    [Key]
    public int UserId { get; set; }

    [Url]
    [DataType(DataType.Url)]
    [Required(AllowEmptyStrings= true)]
    public string WebSite { get; set; }

    [Phone]
    [DataType(DataType.PhoneNumber)]
    [Required(AllowEmptyStrings = true)]
    public string Phone { get; set; }

    [Phone]
    [DataType(DataType.PhoneNumber)]
    [Required(AllowEmptyStrings = true)]
    public string Fax { get; set; }
}

我喜欢Phone和Url属性的验证机制很多,但不幸的是,当这些属性标记的字段是我实际想要允许的空字符串时,验证失败。 [必需(AllowEmptyStrings = true)]似乎不适用于Phone或Url属性。同样似乎也适用于一些其他DataAnnotations属性,如EmailAddress。

有没有办法允许空字符串标记这些属性的字段?

[Phone]和[EmailAddress]等验证属性将检查任何非空字符串值。因为字符串类型本身是可空的,所以传递给ModelBinder的空字符串将被读取为空,通过验证检查。

当添加[必需]属性时,字符串变得有效地不可为空。 (如果使用代码优先,EF将脚本不可空的数据库列。)ModelBinder现在将解释一个空值为String.Empty – 这将失败属性验证检查。

所以没有办法允许具有验证属性的空字符串,但可以允许空字符串。所有您需要做的是删除[必需]属性。空值将为空,非空值将被验证。

在我的情况下,我正在从CSV文件导入记录,并且出现这个问题,因为我正在跳过正常的ModelBinder。如果您正在做这种不寻常的事情,请确保在保存到数据模型之前包括手动检查:

Email = (record.Email == String.Empty) ? null : record.Email
http://stackoverflow.com/questions/19135504/allow-empty-strings-for-fields-marked-with-phoneattribute-or-urlattribute

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 为标有PhoneAttribute或UrlAttribute的字段允许空字符串