在Asp.Net中验证电子邮件MVC 3不起作用

时间:2011-08-19 15:43:34

标签: asp.net asp.net-mvc-3 validation

我尝试遵循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}$") {}  
} 

还找到谷歌搜索的例子。

但是,我尝试了这个版本的电子邮件属性和另一个,但都没有阻止我输入电子邮件字段中的任何内容。我试着输入一个简单的名字,包含空格和所有,它经历了很好!

为什么不踢它并停止它?必需属性有效,它只是正则表达式。

3 个答案:

答案 0 :(得分:2)

请注意,此类电子邮件验证仅涵盖小部分IETF标准,不应在生产代码中使用。首先,它不考虑本地部分的长度(这里可以是任何数字),也不考虑引用的单词,甚至不允许使用非ASCII字符。

我建议你看一下 EmailVerify.NET ,这是一个可以根据所有当前IETF标准验证电子邮件地址语法的Microsoft .NET组件(甚至可以联系相关的邮件交换器检查他们的邮箱是否存在)。正如您所料,此组件也可以轻松地与DataAnnotation框架集成。

免责声明:我是该产品的首席开发人员。

答案 1 :(得分:1)

我自己找到答案,自定义属性必须为其注册“适配器”。对于可能需要它的任何人来说,这是解决方案:

How to create custom validation attribute for MVC

答案 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