电子邮件数据注释验证有效但电话没有

时间:2013-11-01 12:49:19

标签: validation asp.net-mvc-4

我在ASP.NET MVC4项目中使用数据注释来对电子邮件和电话字段执行客户端验证。电子邮件在客户端成功验证但电话没有 - 它允许我输入无效字符,仅在提交表单时提醒我(而不是在输入字符后立即)

在模型中:

[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
[Display(Name = "Email")]
public string Email{ get; set; }

[Required(ErrorMessage = "Mobile is required")]
[DataType(DataType.PhoneNumber)]
[Phone]
[Display(Name = "Mobile number")]
public string Mobile { get; set; }

在视图中我相信我包含了正确的脚本引用:

<script type="text/javascript" src="~/Scripts/jquery.validate.min.js" ></script
<script type="text/javascript" src="~/Scripts/jquery.validate.unobtrusive.min.js" ></script>

..并使用html助手(我正在使用TextBoxFor而不是EditorFor,因为我正在应用类属性,为清楚起见,我在此省略了这些属性)

@Html.LabelFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
@Html.TextBoxFor(model => model.Email, new { @type = "email" })       

@Html.LabelFor(model => model.Mobile)
@Html.ValidationMessageFor(model => model.Mobile)
@Html.TextBoxFor(model => model.Mobile, new { @type = "phone" }) 

我错过了什么?

4 个答案:

答案 0 :(得分:6)

[Required(ErrorMessage = "Mobile is required")]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Entered mobile format is not valid.")]
public string Mobile{get; set;}

它匹配的数字如:0123456789,012-345-6789,(012)-345-6789等。

答案 1 :(得分:2)

MVC 4有一个用于EmailAddress的内置显示模板,但没有PhoneNumber。 您需要为[DataType(DataType.PhoneNumber)]创建自定义DisplayTemplate。

添加以下文件(您可能需要创建子文件夹DisplayTemplates):
Views\Shared\DisplayTemplates\PhoneNumber.cshtml

@model System.String
@if (Model != null)
{
    @:@System.Text.RegularExpressions.Regex.Replace(@Model, "(\\d{3})(\\d{3})(\\d{4})", "$1-$2-$3")
}

答案 2 :(得分:0)

我认为问题是手机类型不受支持。 见phone type support at w3schools

答案 3 :(得分:0)

使用EditorForForted TextBoxFor for Email,然后它会在电子邮件字段中给出错误ok keyup。