15

Ứng dụng MVC của tôi đang tạo HTML sau gây ra lỗi cú pháp Javascript khi gửi (tôi không nhập bất kỳ thứ gì vào hai hộp văn bản). Dưới đây là HTML được tạo và trình xử lý gửi:Lỗi cú pháp với parseJSON trong khi xác thực không phô trương

<form action="/UrIntake/Save" id="UrIntakeForm" method="post"> 

    <input data-val="true" data-val-length="The field LastName must be a string with a maximum length of 50." data-val-length-max="50" data-val-required="The LastName field is required." id="FormSubmitter_LastName" name="FormSubmitter.LastName" type="text" value="" /> 
    <input data-val="true" data-val-length="The field FirstName must be a string with a maximum length of 50." data-val-length-max="50" data-val-required="The FirstName field is required." id="FormSubmitter_FirstName" name="FormSubmitter.FirstName" type="text" value="" /> 

    <div id="SubmissionButtons" class="right"> 
      <input type="button" onclick="SubmitForm()" value="Submit" /> 
      <input type="button" onclick="CancelForm()" value="Cancel" /> 
    </div> 
</form> 

    function SubmitForm() { 
     $("#UrIntakeForm").valid(); 
. 
. 
. 

Đây là mã jQuery xảy ra lỗi cú pháp (v1.9.0). "Dữ liệu" là undefined và "trở lại" đường là nơi mà các lỗi xảy ra:

parseJSON: function(data) { 
    // Attempt to parse using the native JSON parser first 
    if (window.JSON && window.JSON.parse) { 
     return window.JSON.parse(data); 
    } 

Có lẽ, tôi không cần phải nhập bất cứ điều gì vào hộp văn bản (và sau đó sẽ nhận được thông báo "lĩnh vực là cần thiết"). Đây có phải là nguyên nhân gây ra lỗi không? Điều đó không có ý nghĩa, nhưng tôi không thấy những gì khác nó có thể được.

+0

Tôi không nghĩ rằng lỗi này là rõ rệt so với những gì bạn đang hiển thị ở đây. Hãy thử đặt một breakpoint trong mã jQuery nơi lỗi xảy ra và nhìn lại thông qua stack trace để xem nó đang được gọi từ đâu. Điều đó sẽ cho bạn manh mối về lý do tại sao null được truyền cho hàm này. – Jerry

+0

Sẽ làm. Khi tôi khám phá điều gì đó hữu ích, tôi sẽ quay lại. Cảm ơn. – birdus

+0

Hãy bỏ phiếu ở đây để Microsoft sửa chữa nó càng sớm càng tốt: http://connect.microsoft.com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-properly-in-jquery-validate-unobtrusive –

Trả lời

20

Nguyên nhân

Đây là một vấn đề với jquery.validate.unobtrusive.js trong gói ASP.NET.MVC của bạn.

Kể từ jQuery 1.9, hành vi của parseJSON() đã thay đổi và giá trị undefined sẽ được coi là JSON không đúng định dạng, dẫn đến lỗi bạn đã chỉ định. Xem jQuery 1.9 Core Upgrade Guide để biết thêm thông tin.

Giải pháp

Sử dụng jQuery Migrate plugin, mà trong số những thứ khác cho biết thêm khả năng tương thích ngược với các tiện ích jQuery parseJSON().


EDIT

Theo thông báo chính thức trong thread on Microsoft Connect này, vấn đề này đã được giải quyết trong bản phát hành mới nhất của khuôn khổ.

Đương nhiên, như Andreas Larsen đã lưu ý trong các nhận xét, hãy đảm bảo xóa mọi bộ nhớ cache liên quan, phía máy chủ và phía máy khách, sau khi nâng cấp lên bản phát hành mới.

+1

@birdus Không vấn đề gì. Việc phát hành jQuery 1.9 đã gây ra rất nhiều vấn đề như vậy trong nhiều khung công tác. – Boaz

+0

Hãy bỏ phiếu ở đây để Microsoft sửa chữa nó càng sớm càng tốt: http://connect.microsoft.com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-đúng-in-jquery-validate-unobtrusive –

+0

MS phát hành các gói ajax kín đáo và không phô trương. Hàm live() đã được thay thế bằng on() và cũng có thể giải quyết vấn đề phân tích cú pháp json. – firepol

6

Tôi cũng gặp sự cố này. Vấn đề là $ .parseJSON (không xác định) gây ra một ngoại lệ được ném ra, và việc xác thực không phô trương đã thực hiện cuộc gọi đó. Như đã nêu trong câu trả lời được chấp nhận, điều này đã được sửa chữa.

Bạn có thể tải phiên bản Microsoft của kịch bản này mà đúng cách sẽ xác nhận mà không gây ra một ngoại lệ từ liên kết này: http://ajax.aspnetcdn.com/ajax/mvc/5.1/jquery.validate.unobtrusive.min.js

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