9

我在我的 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

4 回答 4

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 等。

于 2014-05-06T21:33:50.037 回答
2

MVC 4 有一个内置的电子邮件地址显示模板,但没有电话号码。您需要为[DataType(DataType.PhoneNumber)].

添加以下文件(您可能必须创建子文件夹 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")
}
于 2014-06-27T15:15:25.667 回答
0

我认为问题在于不支持电话类型。查看w3schools 的电话类型支持

于 2013-11-21T13:16:13.570 回答
0

使用 TextBoxFor 的 EditorFor 插入电子邮件,然后它会在电子邮件字段中给出错误 ok keyup。

于 2015-11-24T13:57:21.197 回答