15

MVCアプリケーションで、次のHTMLが生成されています(2つのテキストボックスに何も入力していない)。邪魔されない検証中に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(); 
. 
. 
. 

これは、構文エラーが発生しているjQueryのコード(v1.9.0)は次のとおりです。ここで生成されたHTMLと提出ハンドラです。 「データ」は未定義で、エラーが発生した場所を「戻り」のラインは次のとおりです。おそらく

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

+0

します。役に立つものが見つかったら、私は戻ってきます。ありがとう。 – birdus

+0

マイクロソフトがすぐに修正できるように、ここに投票してください:http://connect.microsoft.com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-properly-in-jquery-validate-unobtrusive –

答えて

20

原因

これはあなたのASP.NET.MVCパッケージのjquery.validate.unobtrusive.jsの問題です。

jQuery 1.9では、parseJSON()の動作が変更され、undefinedの値が不正なJSONとみなされ、指定したエラーが発生します。詳細については、jQuery 1.9 Core Upgrade Guideを参照してください。

ソリューション

とりわけjQueryのparseJSON()ユーティリティへの下位互換性を追加しjQuery Migrate pluginを、使用してください。


EDIT

このthread on Microsoft Connectで公式発表によると、問題はフレームワークの最新のリリースで解決されています。

当然のことながら、Andreas Larsen氏のコメントによれば、新しいリリースにアップグレードした後は、サーバー側とクライアント側の関連するキャッシュをすべてクリアするようにしてください。

+1

@birdus問題ありません。 jQuery 1.9のリリースでは、多くのフレームワークでこのような問題が発生しました。 – Boaz

+0

マイクロソフトができるだけ早くそれを修正するようにここに投票してください:http://connect.microsoft。com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-適切にjquery-validate-unobtrusive –

+0

MSは、新しい控えめで控えめなajaxパッケージをリリースしました。 live()関数がon()に置き換えられ、json解析問題も解決されました。 – firepol

6

この問題もありました。問題は、$ .parseJSON(undefined)が例外をスローし、邪魔にならない検証がその呼び出しを行っていたことです。受け入れられた答えに述べられているように、これは修正されています。

あなたは正しくこのリンクから、例外を発生させずに検証します。このスクリプトのMicrosoftバージョンをダウンロードすることができます。http://ajax.aspnetcdn.com/ajax/mvc/5.1/jquery.validate.unobtrusive.min.js

関連する問題