17

私のMVCアプリは次のHTMLを生成しているため、送信時にJavascript構文エラーが発生します(2つのテキストボックスに何も入力していません)。生成されたHTMLと送信ハンドラは次のとおりです。

<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)。「data」は未定義で、「return」行はエラーが発生する場所です。

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

おそらく、テキストボックスに何も入力する必要はありません(その後、「フィールドが必要です」というメッセージが表示されるはずです)。これがエラーの原因ですか?それは意味がありませんが、他に何ができるかわかりません。

4

2 に答える 2

23

原因

これは、jquery.validate.unobtrusive.jsASP.NET.MVCパッケージの問題です。

jQuery 1.9以降、の動作parseJSON()が変更され、undefined値が不正な形式のJSONと見なされるため、指定したエラーが発生します。詳細については、jQuery1.9コアアップグレードガイドを参照してください。

解決

jQuery Migrateプラグインを使用します。これにより、特にjQueryparseJSON()ユーティリティに下位互換性が追加されます。


編集

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

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

于 2013-02-11T23:17:26.477 に答える
6

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

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

于 2014-09-23T21:05:39.757 に答える