我有以下型号:
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
答案 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)
答案 2 :(得分:2)
我查看了源代码(由Reflector进行逆向工程),DataType
变体实际上甚至没有实现! (这是针对DateType.Date
)
所以它不会起作用。
我个人会将RegexValidation
用于发送电子邮件。
为清楚起见,以下是课程IsValid
中DataTypeAttribute
的实施:
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}))$"
无效,还有其他:
有效示例:
答案 4 :(得分:-6)
我认为您需要在html代码中添加一个组件Html.ValidationMessageFor
。该组件显示验证。
代码可能是(使用剃刀):
@Html.TextBoxFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
试一试。