15

我的MVC應用程序正在生成下面的HTML,導致提交後的Javascript語法錯誤(我沒有輸入任何東西到兩個文本框中)。這裏是生成的HTML和提交處理程序:語法錯誤與parseJSON在不顯眼的驗證

<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(); 
. 
. 
. 

這是發生語法錯誤(v1.9.0)的jQuery代碼。 「數據」是不確定的,「迴歸」行發生錯誤:

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

據推測,我沒有進入任何東西到文本框(然後應該得到「是必填字段」消息)。這是什麼導致錯誤?這沒有道理,但我不明白還有什麼可能。

+0

我不認爲錯誤是從你這裏展示什麼可辨。嘗試在發生錯誤的jQuery代碼中放置一個斷點,然後通過堆棧跟蹤回顧一下,看看它是從哪裏調用的。這將爲你提供有關爲什麼將null傳遞給此函數的線索。 – Jerry 2013-02-11 23:07:11

+0

會做。當我發現有用的東西時,我會回來。謝謝。 – birdus 2013-02-11 23:08:41

+0

請在此處投票,以便Microsoft儘快更正:http://connect.microsoft.com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-properly-in-jquery-validate-unobtrusive – 2013-02-16 16:35:04

回答

20

原因

這與你的ASP.NET.MVC包jquery.validate.unobtrusive.js的問題。

從jQuery 1.9開始,parseJSON()的行爲已更改,undefined值將被視爲格式錯誤的JSON,從而導致您指定的錯誤。請參閱jQuery 1.9 Core Upgrade Guide瞭解更多信息。

解決方案

使用jQuery Migrate plugin,其中除其他外增加了向後兼容到jQuery的parseJSON()效用。


編輯

根據該thread on Microsoft Connect官方宣佈,問題已經在框架的最新版本中得到解決。

當然,正如Andreas Larsen在評論中指出的那樣,確保在升級到新版本後清除任何相關的緩存,服務器端和客戶端。

+1

@birdus中的問題沒問題。 jQuery 1.9的發佈在許多框架中引發了很多這樣的問題。 – Boaz 2013-02-12 18:16:17

+0

請在此處投票,以便Microsoft儘快糾正它:http://connect.microsoft。com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-jquery-validate-unobtrusive – 2013-02-16 16:29:11

+0

MS發佈了新的不引人注目且不顯眼的ajax包。 live()函數已被替換爲on(),並且解析了json解析問題。 – firepol 2013-03-12 10:37:38