我正在使用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);
答案 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;
。
您必须滚动自己的代码才能实际执行验证。上面链接的问题有一些示例代码,您可以将其作为起点。