Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Cascading Drop Down List: Problemi e delucidazioni
mercoledì 13 ottobre 2010 - 11.27
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 3.5
|
Windows XP
|
Visual Studio 2008
|
SQL Server 2008
|
Internet explorer 8.0
|
Internet Explorer 7.0
|
Internet Explorer 6.0
|
Chrome
|
Opera
|
Safari
|
Firefox
|
Javascript
|
CSS 2.1
|
HTML 4.01
|
XHTML 1.0
jackie1977
Profilo
| Newbie
9
messaggi | Data Invio:
mer 13 ott 2010 - 11:27
Un saluto a tutti da un nuovo membro del forum.
Vengo al dunque:
Scenario: applicazione web asp.net, framework 3.5, AjaxControlToolkit 3.5, linguaggio C#
All'interno di un UpdatePanel ho inserito 3 DropDownList con le relative cascadingDropDownList (devo gestire la situazione classica selezione in cascata di Regioni, provincie e citta). Le 3 DropDownList devono però eseguire un postBack per eseguire una ricerca su db in funzione del valore selezionato e "fillare" una gridView.
Tra una ricerca e l'altra ho deciso di gestire via javascript la gestione asincrona delle richieste per far comparire e scomparire le varie gif animate e messaggi di attesa. Quindi gestisco le funzioni: OnInitializeRequest, OnBeginRequest, OnEndRequest
Problema 1 (Bloccante): Purtroppo (non capisco il perchè e spero qualcuno mi illumini...
) il fatto di abilitare la proprietà autopostback=True, passatemi il termine mi incasina in qualche modo lo ScriptManager. Eseguo la chimata asincrona ed il postBack della "dropDownRegioni" e tutto avviene correttamente: inizializzazione richiesta asoncrona, esecuzione richiesta (appare gif di attesa) asincrona ed esecuzione dell'evento lato server, conclusione della richiesta asincrona (scompare gif di attesa). Nel momento in cui eseguo la seconda richiesta asincrona ed il relativo il postBack della "dropDownProvincie" la stessa viene eseguita, ma Ahimè per "magia" lo ScriptManager (suppongo) esegue autonomamente (senza che io abbia selezionato alcun valore) anche una richiesta per la "dropDownCitta". Il problmea è che questa è una richiesta perpetua, ovvero si esegue all'infinito(senza però che venga mail eseguito l'evento lato server della dropDownList)! Il risultato è che vedo apparire e scomparire in un loop senza fine gif e messaggi di attesa.
Problemi di chiamate in cascata anche non desiderate mi era anche già capitato anche con i pulsanti, ma in questo caso grazie all'istruzione "args.get_postBackElement().id" di Ajax riuscivo a discriminare il componente che ha scatenato la richiesta. Nel caso in oggetto invece sembra vengano scatenate due richieste: "dropDownProvincie" e sucessivamente "dropDownCitta" solo che la seconda si ripete all'infinito per ciò non riesco neppure poter discriminare il componente che esegue la richiesta dato che mi risulta sempre "dropDownCitta".
Alla ricerca di alcune risposte sul web non ho trovato molto a riguardo e l'unica motivazione che ho trovato faceva riferimento a problemi di validazione(potrebbe essere?). Qualcuno sa darmi lumi a riguardo perchè lo scripManager ha questo strano comportamento?
Dato che già in passato ho avuto problemi di questa natura la soluzione a questo tipo di problemi è NON inserire direttamente gli elementi nell' UpdatePanel, ma agganciarli alla stessa all'interno del tag <AsyncPostBackTrigger>. Infatti, con questa modifica, questo fastidioso problema si risolve, ma nel caso specifico ricasco su un altro problema, non bloccante, ma antipatico.
Problema 2 (NON bloccante): le 3 DropDownlist eseguono in pratica una ricerca che filtra "al volo" una gridView. A fianco dei menù a tendina ho messo un pulsante "Visualizza Tutti" che elimina i filtri di ricerca delle dropDownLIst e rieffettua una ricerca senza filtri e perciò ripristinare la totale visualizzazione dell GridView.
per fare ciò al termine della richiesta asincrona eseguo queste istruzioni:
$get(ddlRegioni).selectedIndex = 0;
$find(CascadingDropDownRegioni)._onParentChange(true);
$find(CascadingDropDownRegioni).set_SelectedValue('', '');
$get(ddlProvincie).selectedIndex = 0;
$find(CascadingDropDownProvincie)._onParentChange(true);
$find(CascadingDropDownProvincie).set_SelectedValue('', '');
$get(ddlCitta).selectedIndex = 0;
$find(CascadingDropDownCitta)._onParentChange(false);
$find(CascadingDropDownCitta).set_SelectedValue('', '');
In questo modo riesco a ripristinare lo stato iniziale delle cascadingDropDownList, ma noto questa problematica: Seleziono, ad esempio, la regione "Abruzzo". Chiamata asincrona ed esecuzione del postBack perfette, quindi ricerca OK. Decido di premere il pulsante "Visualizza Tutti". Chiamata asincrona OK, ricerca OK e ripristino delle cascading OK. Però...e questo accade solo ed ESCLUSIVAMENTE la prima volta se decido di rieffettuare la ricerca per la regione "Abruzzo", la richiesta asincrona viene eseguita, ma NON l'evento della dropdownList e perciò risultato ricerca KO. E' come se lo ScriptManager perdesse "l'aggancio" alla chimata lato server oppure che, sebbene le dropDowLIst risultino correttamente riinnizializzate, è come se lo scripManager si "ricordasse" chi ha causato la richiesta precedente e perciò NON esegue correttamente la chiamata lato server. Inoltre il problmea NON si pone se premo due volte il pulsante "Visualizza Tutti", quidni rieffettuando la ricerca con chiave "Abruzzo" avviene; oppure se effettuo una ricerca selezionando qualunue altra regione ad eccezzione di "Abruzzo".
Secondo voi perchè tale comportamento? ho provato a risolvero in più modi, ma non sono stato in grado. Secondo voi come si potrebbe risolvere?
Il secondo non è un problmea bloccante, ma la probabilità che le persone ricerchino sempre per le stesse chiavi di ricerca è molto probabile.
Mi scuso per la lungaggine (e mi scuso per gli eventuali errori di ortografia), ma volevo cercare di essere il più preciso possibile
In attesa di lumi, vi ringrazio anticipatamente
Gianluca
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !