7

Tôi đang sử dụng biểu mẫu để tải lên tệp. Tôi chỉ muốn tải lên các tệp PDF. Đây là mã của tôi:Xác thực tải lên tệp - Jquery và thuộc tính "Chấp nhận"

Một hộp đầu vào để cho phép người dùng chọn một tập tin:

@Html.FileBox(m => m.FileName, new { id = "FileName", accept = "application/pdf" }) 

và một nơi để hiển thị thông báo lỗi (s):

@Html.ValidationMessageFor(m=>m.FileName) 

Các mã được tạo cho trường nhập là:

<input id="FileName" type="file" name="FileName" data-val-required="The File Name field is required." data-val-length-max="512" data-val-length="The field File Name must be a string with a maximum length of 512." data-val="true" accept="application/pdf"> 

Bây giờ ngay cả khi tôi chọn tệp PDF, tôi gặp lỗi Please enter a value with a valid extension.

Tôi đang sử dụng MVC 3 và jquery unobstrusive để xác thực biểu mẫu.

+0

bạn đã tìm ra điều này chưa? Tôi có cùng một vấn đề. Tôi cần phải chấp nhận nhiều loại ("hình ảnh/gif, hình ảnh/png, hình ảnh/jpeg"), trong trường hợp của tôi. –

+0

Không, tôi không có. Tôi đã phải loại bỏ thuộc tính "chấp nhận". Có thể được Jquery Validation không hỗ trợ xác nhận loại MIME cho "accept". – escist

+0

@ThiagoSilva Đối với các loại hình ảnh, nó không phải là một vấn đề. Bạn đã thử một cái gì đó như 'accept =" hình ảnh/gif, hình ảnh/jpeg "'? – escist

Trả lời

7

Phương thức quy tắc "chấp nhận" được tích hợp vào Xác thực jQuery nhận giá trị theo định dạng tương tự "jpg | png".

Thuộc tính HTML "chấp nhận" có định dạng giống như "hình ảnh/jpeg, hình ảnh/png".

Có vẻ như việc xác thực jQuery và tiêu chuẩn HTML không tương thích về vấn đề này.

Tại đây, bạn có thể đọc thêm về jQuery Validation's "accept" ruleHTML5 "accept" attribute.

+1

Hành vi của phương thức "chấp nhận" đã thay đổi với phiên bản 1.10.0. Để biết chi tiết, hãy kiểm tra câu trả lời của tôi. –

10

Tôi đã gặp phải vấn đề tương tự và phải nghỉ mát để vô hiệu hóa xác thực cho thuộc tính chấp nhận hoàn toàn. Tôi đã thêm dòng sau vào trang của mình và nó hoạt động:

$ .validator.addMethod ('accept', function() {return true;});

+0

Tôi muốn phương thức chấp nhận được xác thực. – escist

+0

Cảm ơn! Đó là tất cả những gì tôi cần. Tôi chỉ quan tâm đến việc lọc các tập tin = mở hộp thoại cho các tập tin pdf. Tôi dự định xác thực tệp ở phía máy chủ. – jkokorian

+1

Đã hoạt động! Cảm ơn! -Edit- FYI, sử dụng chức năng ẩn danh đã được cung cấp để xác thực mục nếu bạn cần. –

5

Nếu bạn đặt cả hai định dạng trong khi bạn chấp nhận thuộc tính nó nên làm việc

accept="image/jpeg,image/png,jpg|png" 
7

Họ đã thay đổi hành vi của các "chấp nhận" phương pháp với phiên bản 1.10.0. Thay vì kiểm tra phần mở rộng tập tin, nó bây giờ nhìn vào loại mime. Hành vi cũ hiện có sẵn dưới dạng phương thức "tiện ích mở rộng". Vì vậy, bạn chỉ cần cập nhật phiên bản plugin xác thực jquery của mình và bạn đã hoàn tất. Tôi đã thay thế phiên bản hiện tại 1.9.0 bằng 1.11.0 và đặt các loại mime hợp lệ làm chấp nhận. Nó hiện đang hoạt động như mong đợi:

accept="image/*, application/pdf"