2013-11-01 13 views
9

Tôi đang sử dụng chú thích dữ liệu trong dự án ASP.NET MVC4 để thực hiện xác thực phía máy khách trên các trường email và điện thoại. Email xác nhận thành công trong các khách hàng nhưng điện thoại không - nó cho phép tôi để nhập các ký tự không hợp lệ và chỉ cảnh báo cho tôi về việc xuất trình các hình thức (chứ không phải ngay lập tức sau khi nhân vật được đánh máy)Xác thực chú thích dữ liệu email hoạt động nhưng Điện thoại không

Trong mô hình:

[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; } 

Trong giao diện tôi tin rằng tôi là bao gồm cả các tài liệu tham khảo kịch bản chính xác:

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

..và sử dụng người giúp đỡ html (tôi đang sử dụng TextBoxFor hơn EditorFor như tôi đang áp dụng các thuộc tính lớp mà tôi có bỏ qua ở đây để rõ ràng)

@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" }) 

Tôi đang thiếu gì?

Trả lời

0

Tôi nghĩ rằng vấn đề là loại điện thoại không được hỗ trợ. Xem phone type support at w3schools

+0

Có lẽ tốt hơn nên hỏi OP (sử dụng nhận xét) loại điện thoại nào đang được sử dụng; nó có thể là một loại được hỗ trợ trong trường hợp này không phải là câu trả lời ... – einpoklum

+0

@ OzAnt - bạn đang nói rằng thay vì gõ = "điện thoại" tôi nên sử dụng loại mới = "tel" ?? –

+0

@LiamWeston - Không chính xác: w3schools cho biết HTML5 định nghĩa kiểu đầu vào điện thoại với loại = tel, không phải điện thoại, NHƯNG loại này không được hỗ trợ bởi bất kỳ trình duyệt nào (như tôi đoán số điện thoại khác nhau ở mỗi quốc gia). Vì vậy, bạn có thể tốt hơn khi xác thực số điện thoại của mình bằng regex của riêng bạn trong mô hình của bạn và áp dụng nó cho phía máy khách. Dường như nó là một gợi ý khi iPhone nhận ra loại = "tel", và hoàn toàn thay đổi bàn phím để bàn phím điện thoại tiêu chuẩn xem [link] http://html5doctor.com/html5-forms-input-types/#input -tel – OzAnt

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;} 

Nó sẽ phù hợp với con số như:, 012-345-6789, (012) -345-6789, vv

2

MVC 4 đã tích hợp sẵn trong mẫu hiển thị cho EmailAddress nhưng không Số điện thoại. Bạn cần tạo DisplayTemplate tùy chỉnh cho [DataType(DataType.PhoneNumber)].

Thêm tập tin sau (bạn có thể sẽ phải tạo ra các thư mục con 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") 
} 
0

sử dụng EditorFor insted của TextBoxFor cho Email, sau đó nó sẽ mang lại cho lỗi KeyUp ok trong lĩnh vực email.

+0

@ Html.LabelFor (model => model.Email) @ Html.ValidationMessageFor (model => model.Email) @ Html.EditorFor (model => model.Email) Sử dụng tính năng này để xác thực email –

Các vấn đề liên quan