2011-08-19 39 views
5

Tôi đang sử dụng ASP.NET MVC3 và cố gắng xác thực trường URL bằng cách sử dụng DataAnnotationsExtensions.Xác thực URL DataAnnotations MVC

Đó gần như những gì tôi cần. Tuy nhiên, nó buộc người dùng phải thêm "http: //" ở beggining của chuỗi URL, nếu không, nó sẽ hiển thị thông báo xác nhận sau:

The URL field is not a valid fully-qualified http, https, or ftp URL. 

Trong URL liệu Chú thích Extensions demo page nó cho thấy một trình xác thực bổ sung UrlWithoutProtocolRequired, nhưng tôi không thể tìm thấy nó ở bất cứ đâu.

Tôi làm cách nào để sử dụng trình xác thực này hoặc làm cách nào tôi có thể dễ dàng xác thực URL mà không cần phần "http: //"?

Trả lời

11

Tùy chọn ít giao thức cho DataAnnotationsExtensions có sẵn trong mã nguồn nhưng được coi là beta hoặc "vNext" và chưa được phát hành như là một phần của gói NuGet. Vì vậy, nếu bạn tải xuống nguồn và biên dịch, bạn sẽ thấy thuộc tính [Url] có quá tải [Url (requireProtocol: false)]. Bạn có thể thấy điều này trong tệp UrlAttribute.cs mới nhất (UrlArribute.cs). Ngoài ra, nếu bạn nhìn vào DataAnnotationsExtensions wiki bạn sẽ thấy tính năng này được lên lịch phát hành sớm (tôi đang nghĩ trong một hoặc hai tuần tới để có bản phát hành chính thức tiếp theo).

+0

Cảm ơn một lần nữa, Scott. Tôi sẽ xem xét mã nguồn. –

5

Chỉ cần hoàn thành việc này:

Vì MVC3 bây giờ chúng tôi có thể sử dụng thuộc tính xác thực [URL].

[Required] 
[Url] 
public string Website { get; set; } 
+2

Ding ding ding! Chúng ta có một người chiến thắng! – markthewizard1234

+0

Có cách nào để tùy chọn không? – DonO

0

Tôi không thể tìm thấy thuộc tính được tích hợp để khớp với URL và chấp nhận giao thức là tùy chọn.

Vì vậy, thay vào đó, tôi đã sử dụng các validator biểu thức chính quy sau:

public class MediaModel 
{ 
    public long MediaId { get; set; } 
    [StringLength(60)] 
    [RegularExpression(@"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)", ErrorMessage = "Not a valid website URL")] 
    public string Website { get; set; } 
    [DisplayName("YouTube Video")] 
    [StringLength(200)] 
    [RegularExpression(@"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)", ErrorMessage = "Not a valid YouTube video")] 
    public string YouTubeVideo { get; set; } 
} 

tôi sao chép các biểu hiện thường xuyên từ here, nó là một trong những tốt.

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