c#-使用DataAnnotations和DataTyp进行电子邮件模型验证

我有以下模型:

public class FormularModel
{
    [Required]
    public string Position { get; set; }
    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
    [Required]
    public string Webcode { get; set; }
}

所需的验证工作正常。 但是,当我尝试使用DataType时,它没有反应。

这是我用于电子邮件控件的剃刀代码:

   @Html.TextBoxFor
          (model => model.Email, 
           new { @style = "width: 175px;", @class = "txtField" }
          ) * 

那么,有人知道答案吗?

TIA

lifeofbenschi asked 2020-01-21T19:56:50Z
4个解决方案
115 votes

System.ComponentModel.DataAnnotations.EmailAddressAttribute属性用于格式化目的,而不是用于验证。

我建议您使用ASP.NET MVC 3 Futures进行电子邮件验证。

样例代码:

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

如果您碰巧正在使用System.ComponentModel.DataAnnotations.EmailAddressAttribute,那么现在有一个内置的EmailAddressAttribute,它可以住在System.ComponentModel.DataAnnotations.EmailAddressAttribute中。

Leniel Maccaferri answered 2020-01-21T19:57:21Z
8 votes

DataAnnotationsExtensions项目具有您可以使用的Email属性。

jrummell answered 2020-01-21T19:57:41Z
3 votes

我看过源代码(由Reflector反向工程),实际上甚至没有实现IsValid变体! (这是DataTypeAttribute

因此,它将无法正常工作。

我个人会使用IsValid来发送电子邮件。


为了清楚起见,这是DataTypeAttribute类中的IsValid的实现:

public override bool IsValid(object value)
{
    return true;
}
Aliostad answered 2020-01-21T19:58:14Z
-6 votes

我认为您需要在html代码上添加一个组件Html.ValidationMessageFor。此组件显示了验证。

代码可能是(使用剃须刀):

@Html.TextBoxFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)

尝试一下。

Wmanuelcr answered 2020-01-21T19:58:43Z
translate from https://stackoverflow.com:/questions/8989081/email-model-validation-with-dataannotations-and-datatype