26 messaggi dal 23 luglio 2013
Ciao a tutti, per caso a qualcuno è mai capitato di avere problemi di convivenza tra i validators di asp.net e jquery? Mi spiego meglio con la descrizione di un esempio: se in una semplice pagina con textbox e bottone aggiungo un RequiredFieldValidator, qualsiasi chiamata del metodo dialog di jquery non funziona mentre se disabilito il RequiredFieldValidator questo riprende a funzionare (vale per qualsiasi tipo di validatore asp.net).

Framework 4.5.1
JQuery 2.1.1
JQuery-ui 1.10.4
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Alex,
apri gli strumenti di sviluppo del browser (tasto F12) e vedi se nella console appaiono degli errori javascript, così riusciamo a confermare che si tratti effettivamente di un problema lato client.

Posta il testo dell'errore, così possiamo ragionare su come risolverlo.

AlexTO ha scritto:

se disabilito il RequiredFieldValidator questo riprende a funzionare

Dal framework 4.5, i controlli validator possono sfrutturare jQuery per operare la validazione client.
http://www.codeguru.com/csharp/.net/net_asp/using-unobstructive-validation-in-asp.net-4.5-web-forms.htm
Forse questo fatto è in qualche modo legato al tuo problema.

ciao,
Moreno
Modificato da BrightSoul il 15 luglio 2014 20.27 -

Enjoy learning and just keep making
26 messaggi dal 23 luglio 2013
Ciao Moreno, grazie per l'attenzione. La console web riporta come errore: "TypeError: $(...).dialog is not a function" (solo quando i validators sono attivi altrimenti nulla) per questo avevo provato a sostituire il simbolo del DOM JQuery con la dichiarazione estesa tipo: "jQuery(document).ready(function () {....." perche' da qualche parte avevo letto che sia ajax che quest'ultimo avevano lo stesso simbolo di dichiarazione e pensando a qualche tipo di sovrapposizione del DOM ho provato questa via ma non e' cambiato nulla. Ho provato ad abilitare e disabilitare la UnobtrusiveValidationMode ma nulla anche qui, mi cambiano solo gli attributi "data-*", mi e' anche venuto il dubbio che fosse Firefox ma anche con gli altri browser lo fa.

Anche provando con un semplice dialog vuoto da code behind stesso risultato:

string ProvaDialogFunction = "$(function() {$('<div id=\"prova_dlg\"></div>').dialog();});";

ClientScript.RegisterStartupScript(this.GetType(), "prova", ProvaDialogFunction, true);
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Alex,
per qualche motivo la funzione .dialog() non esiste, dobbiamo fidarci di quello che ci dice il browser.
Questo può dipendere dall'ordine con cui sono stati inclusi i file .js. Sono sicuro che tu abbia inserito jQuery prima di jQueryUI, ma qui c'è di mezzo anche lo ScriptManager, che aggiunge esso stesso un ulteriore riferimento a jQuery. Quindi penso che la situazione attuale della tua pagina sia questa:
  • jQuery referenziato nella <head>
  • jQueryUI referenziato nella <head>
  • jQuery referenziato - di nuovo - dallo script manager più in basso, all'interno del form

Siccome la funzione $ di jQuery viene ridefinita daccapo, ecco che viene svuotata di ogni altra funzione aggiuntiva, come dialog().

Prova a risolvere così:
  • Elimina il riferimento a jQuery che hai messo nella <head>, tanto ci pensa lo ScriptManager ad aggiungerlo.
  • Sposta il riferimento a jQueryUI più in basso, ad esempio subito prima della chiusura del tag </body>. Questa è anche una buona pratica che darà l'impressione all'utente che la pagina si sia caricata più velocemente.


ciao,
Moreno
Modificato da BrightSoul il 16 luglio 2014 21.48 -

Enjoy learning and just keep making
26 messaggi dal 23 luglio 2013
L'ordine di inserimento era giusto e anche la tua soluzione
Ora funziona tutto perfettamente! Una curiosità, ma lo ScriptManager che versione utilizza di JQuery? Quella definita in packages.config? (quella presa da nuget?).

Ti devo una birra!
Grazie ancora

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.