7

Tôi đã đoạn mã sau vào lớp mẫu của tôi:client-side chuyến đi xác nhận trên DataAnnotation Phạm vi thuộc tính

[Range(1, 100)] 
    public decimal Price { get; set; } 

Sau khi nâng cấp gần đây (tôi giả sử) của jquery.validate để 1.11.0, tôi nhận được một lỗi ngay cả khi tôi nhập giá trị hợp lệ. Nếu tôi tắt xác thực ứng dụng khách trong web.config - hoạt động tốt. Tất cả các thuộc tính khác (StringLength, Bắt buộc) hoạt động tốt. HTML được tạo sau đây (các ngắt dòng được thêm cho độ rõ ràng):

<input class="text-box single-line" data-val="true" 
data-val-number="The field Price must be a number." 
data-val-range="The field Price must be between 1 and 100." 
data-val-range-max="100" data-val-range-min="1" 
data-val-required="The Price field is required." id="Price" name="Price" 
type="text" value="" /> 

Tôi khá chắc chắn rằng nó hoạt động trước ... Không thể nghĩ ra điều gì ngoài lỗi trong jquery.validate.

+0

Phiên bản jquery bạn đang sử dụng? –

+1

vấn đề là về jquery không xác nhận kiểm tra [ở đây] (http://stackoverflow.com/questions/14593724/jquery-1-9-0-live-function) –

+0

có vẻ như nó là một vấn đề khác nhau; không liên quan đến jquery. Một nơi nào đó giữa jquery-validate và unobtrusive validation – Felix

Trả lời

1

Microsoft đã phát hành một bản cập nhật để microsoft.jQuery.Unobtrusive.Ajax và microsoft.jQuery.Unobtrusive.Validation (từ phiên bản '2.0.20710.0' thành '2.0.30116.0'), có thể chữa cả .live và sự cố xác thực

+1

Tôi vẫn gặp sự cố với '2.0.30116.0'. Tôi đã cập nhật mọi thứ. –

+0

@Rowan, bạn có thể muốn bắt đầu một chuỗi mới và đưa thêm chi tiết ... Tôi sẽ sẵn lòng trợ giúp; nhưng tôi không gặp vấn đề gì nữa với 2.0.30116 - vì vậy khó khắc phục thêm! – Felix

+0

@Felix cảm ơn, Felickz – felickz

0

xảy ra này vì bạn đã được cập nhật phiên bản Jquery và phiên bản mới của Jquery có bản cập nhật mới khác nhau và họ cũng đã gỡ bỏ một số chức năng như .live và thay thế nó bằng .Trên

Đi qua nó ...

http://jquery.com/upgrade-guide/1.9/#live-removed

+0

Cảm ơn bạn rất nhiều! Có, tôi cũng có một popup về .live không còn được hỗ trợ sau khi tôi nâng cấp jquery lên 1.9.1. Khi tôi thêm jquery.migrate, popup sẽ biến mất. * Tuy nhiên * lỗi xác thực vẫn còn! Nó có thể có cùng nguyên nhân gốc rễ; nhưng việc thêm di chuyển không giúp ích gì; và tôi không tìm thấy gì trong danh sách - https://github.com/jquery/jquery-migrate/blob/master/warnings.md – Felix

12

Chúng tôi đang gặp vấn đề tương tự với jQuery.validate 1.11.0 và Microsoft.jQuery.Unobtrusive.Validation 2.0.30116.0. Một nơi nào đó trong bản cập nhật thư viện xác nhận, trình xác thực số đã bị hỏng.

Có một vấn đề mở về vấn đề theo dõi GitHub liên quan đến vấn đề này: https://github.com/jzaefferer/jquery-validation/issues/626

Được trích dẫn trong vấn đề đó:

trở this.optional (element) || (value> = param [0] & & giá trị < = param [1]);

Vì dòng này kiểm tra chuỗi chứ không phải số. Nếu tôi có một phạm vi từ 30 đến 200, và tôi muốn xác 120, sau đó chuỗi 120 là ít sau đó chuỗi 30.

Dòng này phải được một cái gì đó như thế này:

trở this.optional (element) || (Số (giá trị)> = Số (param [0]) & & Số (giá trị) < = Số (param [1]));

Tôi đã thay đổi bản sao của tôi jquery.validate.js:

// http://docs.jquery.com/Plugins/Validation/Methods/range 
range: function(value, element, param) { 
    return this.optional(element) || (value >= param[0] && value <= param[1]) || (Number(value) >= Number(param[0]) && Number(value) <= Number(param[1])); 
}, 

Bây giờ các hoạt động phạm vi làm việc như dự định sử dụng DataAnnotations:

[Range(1, 100)] 
public decimal Price { get; set; } 
+0

Dường như bộ điều hợp thực sự của Microsoft có vấn đề. Bộ điều hợp phải được điều chỉnh để phân tích một số (tìm adapter.addMinMax trong mã) http://connect.microsoft.com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-properly- in-jquery-validate-unobtrusive –

+0

+1 Cách giải quyết này hoạt động hoàn hảo. Nếu không có nó tôi vẫn gặp rắc rối kể từ ngày 10 tháng 4 năm 2013, ngay cả với các tệp jQuery mới nhất. –

+0

Trình theo dõi vấn đề GitHub trong liên kết ở trên báo cáo sự cố được khắc phục trong Xác thực jQuery V1.11.1 (xuất bản ngày 25/03/2013). Nó bây giờ làm việc cho tôi. (Tôi có Microsoft.jQuery.Unobtrusive.Validation 2.0.30506.0) – Colin

0

Tôi chạy vào trong này thời gian gần đây. Tôi đã nâng cấp từ MVC 2 lên MVC 5.Có vẻ như tên thông số đã được thay đổi từ "tối thiểu" và "tối đa" thành "min" và "tối đa"

Nếu bạn muốn khắc phục vấn đề mà không gặp phải rắc rối khi nâng cấp tệp JavaScript của mình, hãy tìm kiếm giải pháp của bạn hai dòng sau và thay thế chúng với dòng tốt hơn

rule.ValidationParameters['minimum'] 

thay thế với

typeof(rule.ValidationParameters['minimum'])!='undefined'?rule.ValidationParameters['minimum']:rule.ValidationParameters['min'] 

rule.ValidationParameters['maximum']; 

với

typeof(rule.ValidationParameters['maximum'])!='undefined'?rule.ValidationParameters['maximum']:rule.ValidationParameters['max'] 

Hoặc cách khác, thay thế "RangeValidator" chức năng với mã này

Sys.Mvc.RangeValidator.create=function(rule){var $0=typeof(rule.ValidationParameters['minimum'])!='undefined'?rule.ValidationParameters['minimum']:rule.ValidationParameters['min'];var $1=typeof(rule.ValidationParameters['maximum'])!='undefined'?rule.ValidationParameters['maximum']:rule.ValidationParameters['max'];return Function.createDelegate(new Sys.Mvc.RangeValidator($0,$1),new Sys.Mvc.RangeValidator($0,$1).validate);} 
+1

Có vẻ như bạn cực kỳ trái ngược với những rắc rối khi nâng cấp các gói tiêu chuẩn. Hầu hết các nhà phát triển có nhiều nghịch lý hơn * thay đổi * đối với các gói tiêu chuẩn và trong mọi trường hợp, được nâng cấp từ MVC 2 ** năm trước **! – Felix