使用DataAnnotations和DataType进行电子邮件模型验证

时间:2012-01-24 15:07:12

标签: c# asp.net-mvc validation email model

我有以下型号:

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

5 个答案:

答案 0 :(得分:109)

DataType属性用于格式化目的,而不是用于验证。

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

示例代码:

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

如果您正在使用.NET Framework 4.5,那么现在内置EmailAddressAttribute内置System.ComponentModel.DataAnnotations.EmailAddressAttribute

答案 1 :(得分:8)

DataAnnotationsExtensions项目有Email attribute你可以使用。

答案 2 :(得分:2)

我查看了源代码(由Reflector进行逆向工程),DataType变体实际上甚至没有实现! (这是针对DateType.Date

所以它不会起作用。

我个人会将RegexValidation用于发送电子邮件。


为清楚起见,以下是课程IsValidDataTypeAttribute的实施:

public override bool IsValid(object value)
{
    return true;
}

答案 3 :(得分:0)

我使用了这个正则表达式模式,它将允许一些较新的更长的扩展名(.mynewsite 等)。

@"^[\w-_]+(\.[\w!#$%'*+\/=?\^`{|}]+)*@((([\-\w]+\.)+[a-zA-Z]{2,20})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$"

无效,还有其他:

  • email@com
  • email-o'neil@mysite.com <-- 不喜欢打勾,哦,好吧。

有效示例:

  • email@m.superlongextension

答案 4 :(得分:-6)

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

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

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

试一试。