我尝试遵循Googling发现的验证电子邮件地址的指导原则,并使用了以下内容:
[Required(ErrorMessage = "Email required.")]
[ValidateEmail(ErrorMessage = "Valid email required.")]
public string Email { get; set; }
这是属性类:
public class ValidateEmailAttribute : RegularExpressionAttribute
{
public ValidateEmailAttribute() :
base(@"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$") {}
}
还找到谷歌搜索的例子。
但是,我尝试了这个版本的电子邮件属性和另一个,但都没有阻止我输入电子邮件字段中的任何内容。我试着输入一个简单的名字,包含空格和所有,它经历了很好!
为什么不踢它并停止它?必需属性有效,它只是正则表达式。
答案 0 :(得分:2)
请注意,此类电子邮件验证仅涵盖小部分IETF标准,不应在生产代码中使用。首先,它不考虑本地部分的长度(这里可以是任何数字),也不考虑引用的单词,甚至不允许使用非ASCII字符。
我建议你看一下 EmailVerify.NET ,这是一个可以根据所有当前IETF标准验证电子邮件地址语法的Microsoft .NET组件(甚至可以联系相关的邮件交换器检查他们的邮箱是否存在)。正如您所料,此组件也可以轻松地与DataAnnotation框架集成。
免责声明:我是该产品的首席开发人员。
答案 1 :(得分:1)
我自己找到答案,自定义属性必须为其注册“适配器”。对于可能需要它的任何人来说,这是解决方案:
答案 2 :(得分:0)
您是否在控制器中检查您的型号是否有效?
[HttpPost]
public ActionResult Register(User user)
{
if (Model.IsValid())
{
// process model
return View("Success");
}
return View(user);
}
您是否引用了MicrosoftAjax和MicrosoftMvcValidation脚本并在视图顶部验证了您的模型?
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<% Html.EnableClientValidation(); %>
有关更详细的说明,请参阅http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx。