数据注释中的电子邮件属性为两种情况提供了奇怪的结果

时间:2014-06-30 03:12:13

标签: c# asp.net-mvc-3

我使用Email属性(数据注释扩展)获得了奇怪的行为。当我从CSV文件导入员工时,当该列为空时,该电子邮件无效,但是当我从表单创建员工时,即使我将电子邮件留空,它也能正常工作。我不知道为什么这两个行为属于同一个属性。

1 个答案:

答案 0 :(得分:0)

这对您的代码没有任何不妥,这是我在数据注释包中的电子邮件属性中的错误。他们正在检查属性中的isnull但是它必须是IsNullOrEmpty检查你的import属性是否为空,如果空传递为null问题应该解决。这只发生在CSV上的原因,因为在excel表上它只是空而不是空。

供您参考,请参阅数据注释解编译代码。

namespace DataAnnotationsExtensions
{
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class EmailAttribute : DataTypeAttribute
{
private static Regex _regex = new Regex(@"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$", RegexOptions.Compiled | RegexOptions.IgnoreCase);

public EmailAttribute()
: base(DataType.EmailAddress)
{
}

public override string FormatErrorMessage(string name)
{
if (ErrorMessage == null && ErrorMessageResourceName == null)
{
ErrorMessage = ValidatorResources.EmailAddressAttribute_Invalid;
}

return base.FormatErrorMessage(name);
}

public override bool IsValid(object value)
{
if (value == null)
{
return true;
}

string valueAsString = value as string;
return valueAsString != null && _regex.Match(valueAsString).Length > 0;
}
}
}

度过美好的一天