【问题标题】:Validate email in Asp.Net MVC 3 doesn't work在 Asp.Net MVC 3 中验证电子邮件不起作用
【发布时间】:2011-08-19 15:43:33
【问题描述】:

我已尝试遵循谷歌搜索验证电子邮件地址的指南,并使用了以下内容:

    [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}$") {}  
} 

还发现谷歌搜索示例。

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

为什么不启动并阻止它? Required 属性有效,只是正则表达式无效。

【问题讨论】:

  • 您是否独立于站点测试了正则表达式字符串?格式可能会爆炸。还要检查 javascript 错误。
  • 把代码贴在你的action方法里,还需要的属性能用吗?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    自己找到了答案,自定义属性必须为其注册一个“适配器”。以下是其他可能需要它的人的解决方案:

    How to create custom validation attribute for MVC

    【讨论】:

      【解决方案3】:

      您是否正在检查您的模型在您的控制器中是否有效?

      [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

      【讨论】:

      • 不,这不是问题,我自己发现的,看我的回答。还是谢谢。
      猜你喜欢
      • 2013-11-11
      • 2011-11-06
      • 2020-03-30
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 2017-05-27
      • 2012-08-19
      • 2019-01-01
      相关资源
      最近更新 更多