15

La mia app MVC sta generando il seguente codice HTML che causa un errore di sintassi JavaScript al momento dell'invio (non sto digitando nulla nelle due caselle di testo). Ecco il codice HTML generato e il gestore conferma:Errore di sintassi con parseJSON durante la convalida non invadente

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

Questo è il codice jQuery in cui l'errore di sintassi si verifica (v1.9.0). "Dati" non è definito e la linea di "ritorno" è dove si verifica l'errore:

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

Presumibilmente, non ho nulla di entrare nelle caselle di testo (e dovrebbe quindi ottenere il messaggio "campo è obbligatorio"). È questo che sta causando l'errore? Non ha senso, ma non vedo cos'altro potrebbe essere.

+0

Non credo che l'errore è distinguibile da quello che si sta mostrando qui. Prova a inserire un punto di interruzione nel codice jQuery in cui si verifica l'errore e guarda indietro attraverso la traccia dello stack per vedere da dove viene chiamato. Questo ti darà indizi sul motivo per cui null viene passato a questa funzione. – Jerry

+0

Lo farà. Quando scopro qualcosa di utile, tornerò. Grazie. – birdus

+0

Si prega di votare qui in modo che Microsoft lo corregga AL PIÙ PRESTO: http://connect.microsoft.com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-properly-in-jquery-validate-unobtrusive –

risposta

20

Causa

questo è un problema con il jquery.validate.unobtrusive.js nel pacchetto ASP.NET.MVC.

A partire da jQuery 1.9, il comportamento di parseJSON() è stato modificato e un valore undefined sarebbe considerato un JSON non valido, con conseguente errore specificato. Vedere lo jQuery 1.9 Core Upgrade Guide per ulteriori informazioni.

Soluzione

Utilizza la jQuery Migrate plugin, che tra l'altro aggiunge backward-compatibility all'utilità jQuery parseJSON().


EDIT

Secondo l'annuncio ufficiale in questo thread on Microsoft Connect, il problema è stato risolto nella versione più recente del quadro.

Naturalmente, come ha osservato Andreas Larsen nei commenti, assicurarsi di cancellare qualsiasi cache pertinente, lato server e lato client, dopo l'aggiornamento alla nuova versione.

+1

@birdus Nessun problema. Il rilascio di jQuery 1.9 ha causato molti di questi problemi in molti framework. – Boaz

+0

Si prega di votare qui in modo che Microsoft lo correggi APPENA POSSIBILE: http://connect.microsoft.com/VisualStudio/feedback/dettagli/776965/please-support-jquery-v1-9-0-properly-in-jquery-validate-discreto –

+0

MS ha rilasciato i nuovi pacchetti ajax discreti e non invadenti. la funzione live() è stata sostituita con on() e anche il problema di parson json è stato risolto. – firepol

6

Ho riscontrato questo problema. Il problema era che $ .parseJSON (indefinito) causa il lancio di un'eccezione e che la convalida non invadente stava effettuando quella chiamata. Come indicato nella risposta accettata, questo è stato risolto.

è possibile scaricare la versione di Microsoft di questo script che sarà correttamente convalida senza causare un'eccezione da questo link: http://ajax.aspnetcdn.com/ajax/mvc/5.1/jquery.validate.unobtrusive.min.js

Problemi correlati