Domanda

Sto utilizzando una versione precedente di ASP.NET AJAX a causa di limitazioni di runtime, l'inserimento di un validatore ASP.NET all'interno di un pannello di aggiornamento non funziona.Esiste un trucco per farli funzionare o è necessario utilizzare il controllo ValidatorCallOut fornito con il toolkit AJAX?

È stato utile?

Soluzione

Sospetto che tu stia eseguendo la versione originale (RTM) di .NET 2.0.

Fino all'inizio del 2007 i controlli di validazione non erano compatibili con UpdatePanels.Questo problema è stato risolto con SP1 di .NET Framework.

L'origine del problema è che UpdatePanel è in grado di rilevare le modifiche al markup nella tua pagina, ma non ha modo di tenere traccia correttamente degli script.I validatori fanno molto affidamento sugli script.Durante un postback parziale, gli script vengono spazzati via, non aggiornati o non eseguiti quando dovrebbero.

Nelle prime beta, MS ha fatto provare UpdatePanel Indovinare quali script dovevano essere nuovamente renderizzati o eseguiti.Non ha funzionato molto bene e hanno dovuto toglierlo.

Per aggirare il problema immediato, Microsoft ha rilasciato una versione corretta delle classi di validazione in una nuova DLL chiamata Validators.DLL e ha fornito istruzioni su come indicare ad ASP.NET di utilizzare quelle classi invece di quelle reali.Se cerchi su Google quel nome DLL, dovresti trovare maggiori informazioni.Guarda anche Questo post sul blog.

Questa era una misura tampone e dovresti farlo non usarlo evitatelo se possibile.

La vera soluzione al problema arrivò poco dopo, in .NET 2.0 SP1.Microsoft ha introdotto un nuovo meccanismo per registrare gli script in SP1 e ha modificato le classi di validazione reali per utilizzare quel meccanismo invece di quello precedente.

Permettimi di darti alcuni dettagli sulle modifiche:

Tradizionalmente, si supponeva che gli script fossero registrati tramite metodi Page come Page.RegisterStartupScript() e Page.RegisterClientScriptBlock().Il problema è che questi metodi non sono stati progettati per l'estensibilità e UpdatePanel non aveva modo di monitorare tali chiamate.

In SP1 è presente un nuovo oggetto proprietà nella pagina denominata Page.ClientScripts.Questo oggetto dispone di metodi per registrare script equivalenti (e per certi versi migliori) a quelli originali.Inoltre, UpdatePanel può monitorare queste chiamate, in modo da eseguire nuovamente il rendering o chiamare i metodi quando appropriato.Il vecchio RegisterStartupScript(), ecc.i metodi sono stati deprecati.Funzionano ancora, ma non all'interno di un UpdatePanel.

Non c'è alcun motivo (a parte la politica, suppongo) per non aggiornare le proprie installazioni a .NET 2.0 SP1.I Service Pack contengono correzioni importanti.

Buona fortuna.

Altri suggerimenti

@Jonathan Olanda:Cosa c'è di sbagliato nell'usare Validators.dll?

Poiché sostituiscono le classi originali, stai tranquillamente bypassando eventuali bug e correzioni di sicurezza, miglioramenti, ecc.che Microsoft potrebbe rilasciare in futuro (o potrebbe aver già rilasciato).A meno che non guardi attentamente web.config, potresti non notare mai che stai saltando le patch.

Naturalmente bisogna valutare ogni situazione.Se sei assolutamente bloccato nell'utilizzo di .NET 2.0 RTM, Validators.dll è meglio di niente.

@jmein

In realtà il problema è che gli script del client Validator non funzionano se inseriti all'interno di un updatePanel (gli UpdatePanel si aggiornano utilizzando .innerHTML, che aggiunge i nodi di script come nodi di testo, non nodi di script, quindi il browser non li esegue).

La correzione era una patch rilasciata da Microsoft che risolve questo problema.L'ho trovato con l'aiuto di Google.

http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx

Se per qualsiasi motivo non riesci a utilizzare la versione aggiornata dei controlli di convalida ASP.NET è in realtà molto semplice convalidare tu stesso un gruppo di convalida, tutto ciò che devi fare è chiamare

Page_ClientValidate("validationGroupName");

Quindi puoi utilizzare PageRequestManager per eseguire la convalida di cui hai bisogno.

Sicuramente usare i controlli di validazione aggiornati è la strada da percorrere, ma ho una predilezione per JavaScript ;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top