2012-12-10 14 views
8

Ho un'applicazione ASP.Net MVC3 in cui è presente una pagina parziale che carica un carico enorme di controlli html (attorno a Count = 980) a cui è stata assegnata la convalida.La validazione discreta di Jquery funziona molto lentamente ASP.Net MVC3

JQuery La convalida discreta richiede molto tempo per convalidare il modulo con i controlli precedenti. Sta colpendo le prestazioni dell'applicazione. C'è un modo per migliorare, come viene fatta la validazione sugli elementi del DOM?

risposta

6

Ho avuto lo stesso problema. Non abbiamo trovato un modo semplice per migliorare le prestazioni.

Ho dovuto disabilitare la convalida lato client e non invadente per la pagina. Il modulo impiegava 10 secondi per il rendering e aveva solo un ID e una casella di controllo per articolo per circa 1000 articoli. Dopo aver rimosso il lato client e il caricamento della pagina non invadente era di circa 1 secondo

Abbiamo appena convalidato sul controller.

È possibile utilizzare questi aiutanti livello di pagina

Html.EnableClientValidation(false); 
Html.EnableUnobtrusiveJavaScript(false); 
+0

Woa! Sono curioso, che tipo di funzionalità ha mille input nella stessa pagina? – vtortola

+1

Richiesta di funzionalità client. Volevo poter confermare in blocco in una sezione di amministrazione. Non volevo cercapersone e non volevo Ajax. Quindi era una forma gigantesca. – GraemeMiller

+2

ahh ... clienti pazzi ... – vtortola

2

mi sono imbattuto in questo problema oggi. Mi sono reso conto che c'era un rallentamento significativo in una delle mie grandi liste. C'è un'opzione per visualizzare tutto, e in quella vista c'è un modulo per riga per l'eliminazione di elementi. jquery.validate.unobtrusive stava distruggendo questa pagina al caricamento. Quando è stato rimosso, il carico era solo di 2 secondi. Molte delle forme non avevano bisogno di validazione, ma alcune lo facevano ancora. Di conseguenza, ho guardato nel codice per il file e trovato questo:

parse: function (selector) { 
     /// <summary> 
     /// Parses all the HTML elements in the specified selector. It looks for input elements decorated 
     /// with the [data-val=true] attribute value and enables validation according to the data-val-* 
     /// attribute values. 
     /// </summary> 
     /// <param name="selector" type="String">Any valid jQuery selector.</param> 
     $(selector).find(":input[data-val=true]").each(function() { 
      $jQval.unobtrusive.parseElement(this, true); 
     }); 

     $("form").each(function() {//THIS IS THE OFFENDING CODE 
      var info = validationInfo(this); 
      if (info) { 
       info.attachValidation(); 
      } 
     }); 
    } 

mi sono reso conto che avrei avuto bisogno di modificare in qualche modo quella chiamata, ma conservano ancora la funzionalità. Quello che ho finito è stato contrassegnare tutte le mie forme che non volevo passare attraverso questo metodo di analisi con class="skipValid". Quindi, nel codice sorgente, ho apportato questa modifica:

$("form:not(.skipValid)").each(function() { 

e ho avuto il meglio di entrambi i mondi.

Problemi correlati