15

Meine MVC-Anwendung erzeugt den folgenden HTML-Code, der bei der Übergabe einen Javascript-Syntaxfehler verursacht (ich gebe nichts in die beiden Textfelder ein). Hier ist die erzeugte HTML und der Handler einreichen:Syntaxfehler mit parseJSON bei unauffälliger Validierung

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

Dies ist die jQuery-Code, wo der Syntaxfehler auftritt (v1.9.0). „Daten“ ist nicht definiert und die „Rückkehr“ Linie ist, wo der Fehler auftritt:

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

Vermutlich, ich habe nichts in die Textfelder eingeben (und sollte dann bekommen das „Feld ist erforderlich“ -Nachricht). Ist das der Grund für den Fehler? Das macht keinen Sinn, aber ich sehe nicht, was es sonst sein könnte.

+0

Ich glaube nicht, dass der Fehler erkennbar ist, was Sie hier sind zeigt. Versuchen Sie, einen Haltepunkt in den jQuery-Code zu setzen, in dem der Fehler auftritt, und schauen Sie durch den Stack-Trace zurück, um zu sehen, woher er aufgerufen wird. Das gibt Ihnen Hinweise, warum NULL an diese Funktion übergeben wird. – Jerry

+0

Wird tun. Wenn ich etwas hilfreiches finde, komme ich zurück. Vielen Dank. – birdus

+0

Bitte stimmen Sie hier ab, damit Microsoft dies so schnell wie möglich korrigiert: http://connect.microsoft.com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-properly-in-jquery-validate-unobtrusive –

Antwort

20

Ursache

Dies ist ein Problem mit jquery.validate.unobtrusive.js in Ihrem ASP.NET.MVC Paket.

Ab jQuery 1.9 hat sich das Verhalten von parseJSON() geändert, und ein undefined-Wert wird als fehlerhafter JSON betrachtet, was zu dem von Ihnen angegebenen Fehler führt. Weitere Informationen finden Sie unter jQuery 1.9 Core Upgrade Guide.

Lösung

Verwenden jQuery Migrate plugin, die unter anderem die Rückwärtskompatibilität mit dem jQuery parseJSON() Dienstprogramm fügt.


EDIT

Nach der offiziellen Ankündigung in diesen thread on Microsoft Connect, das Problem wurde in der neuesten Version des Frameworks aufgelöst.

Natürlich, wie Andreas Larsen in den Kommentaren angemerkt hat, löschen Sie alle relevanten Cache, Server-Seite und Client-Seite, nach dem Upgrade auf die neue Version.

+1

@ birdus Kein Problem ist. Die Veröffentlichung von jQuery 1.9 verursachte viele dieser Probleme in vielen Frameworks. – Boaz

+0

Bitte stimmen Sie hier ab, damit Microsoft dies so schnell wie möglich korrigiert: http://connect.microsoft.com/VisualStudio/feedback/details/776965/bitte-support-jquery-v1-9-0-richtig-in-jquery-validate-unaufdringlich –

+0

MS veröffentlicht die neuen unaufdringlichen und unaufdringlichen Ajax-Pakete. Die Funktion live() wurde durch on ersetzt() und auch das Json-Parser-Problem ist gelöst. – firepol

6

Ich hatte auch dieses Problem. Das Problem war, dass $ .parseJSON (undefiniert) eine Ausnahme ausgelöst hat und dass die unauffällige Validierung diesen Aufruf ausgelöst hat. Wie in der angenommenen Antwort angegeben, wurde dies seither behoben.

Sie können die Microsoft-Version dieses Skript herunterladen, die, ohne eine Ausnahme von dieser Verbindung richtig validieren: http://ajax.aspnetcdn.com/ajax/mvc/5.1/jquery.validate.unobtrusive.min.js