如何使用DataAnnotations属性DataType.EmailAddress使用的相同方法验证电子邮件地址?

时间:2011-07-07 18:50:44

标签: asp.net-mvc

我正在使用MVC3并且在代码的某些位置我使用System.ComponentModel.DataAnnotations.DataType.EmailAddress属性并让MVC模型验证为我做验证。

但是,我现在想在不使用模型的代码的不同部分验证电子邮件地址。我想使用已经被MVC使用的相同方法,但我无法找到有关如何执行此操作的任何信息。

编辑 - 如果我的问题不清楚,请抱歉。我会尝试澄清。

以下是RegisterModel的一个片段,它包含在默认的MVC模板中:

    public class RegisterModel
    {
...

        [Required]
        [DataType(DataType.EmailAddress)]
        [DisplayName("Email address")]
        public string Email { get; set; }
...
     }

这些属性指示mvcs模型验证如何验证此模型。

但是,我有一个应该包含电子邮件地址的字符串。我想以与mvc相同的方式验证电子邮件地址

string email = "noone@nowhere.com";
bool isValid = SomeMethodForValidatingTheEmailAddressTheSameWayMVCDoes(email);

3 个答案:

答案 0 :(得分:5)

正如其他人所说,DataType属性实际上并没有进行任何验证。我建议您查看Data Annotations Extensions,其中包括已经编写的各种内容的验证扩展,包括电子邮件。

还可以明确地对您的完整模型进行模型验证:Manual Validation with Data Annotations

如果您想对特定字段/属性进行每个属性验证,您还可以查看tests for DataAnnotationExtensions,它可以为您提供所需内容:

[TestMethod]
public void IsValidTests()
{
    var attribute = new EmailAttribute();
    Assert.IsTrue(attribute.IsValid(null)); // Don't check for required
    Assert.IsTrue(attribute.IsValid("foo@bar.com"));
    ..
}

答案 1 :(得分:0)

查看this blog post by Scott Guthrie,其中显示了如何使用自定义属性(基于RegularExpressionAttribute)实现电子邮件地址的验证。

如果您需要在其他地方验证电子邮件地址,则可以重复使用该逻辑。

答案 2 :(得分:0)

您可能需要查看此问题:Is the DataTypeAttribute validation working in MVC2?

总结一下,[DataType(DataType.EmailAddress)] 实际上并没有验证任何内容,它只是说“嘿,这个属性应该是一个电子邮件地址”。像Html.DisplayFor()这样的方法会检查这个并将其呈现为<a href="mailto:foo">foo</a>,但IsValid()方法非常简单return true;

您必须滚动自己的代码才能实际执行验证。上面链接的问题有一些示例代码,您可以将其作为起点。