Reload Pagina, Settare select, perdita informazioni

martedì 16 settembre 2008 - 16.25

stuzzo Profilo | Junior Member

Ciao a tutti!
Vi chiedo cortesemente di darmi una mano a risolvere il mio problema.
Ve lo spiego:
Sto creando una normale pagina per la registrazione di un utente e tra i campi da riempire, ci sono città e provincia.
Attualmente nel momento che viene selezionata la provincia, scatta un metodo AJAX che riempie la select delle città. Fino a qui nessun problema...
Ma nel caso nel form di registrazione ci sia qualcosa che va "storto", oltre a far visualizzare l'errore sarebbe bello ritrovarsi tutte le informazioni immesse.
Ebbene, non so come, ma il form riesce a ricordarsi tutto tranne la città, anzi la select della città torna "disabled"...per farlo tornare enabled bisogna selezionare prima un'altra provincia per poi tornare su quella di appartenenza per fare in modo che si scaturiscono gli eventi dovuti al click.

Potete consigliarmi un modo per fare in modo che il form si ricordo la città immessa?
Ho provato diverse soluzioni, ma niente....
Stavo pensando o di passare in POST il valore della città.....

Ogni consiglio è ben accetto!!!!
Grazie in anticipo :)

Wamba Profilo | Expert

Qualcosa che va storto in ajax o in un postback completo?
Che cosa intendi con ajax: un updatepanel?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

stuzzo Profilo | Junior Member

>Qualcosa che va storto in ajax o in un postback completo?
>Che cosa intendi con ajax: un updatepanel?

Ciao,
quando dico che ci sia qualcosa che vada "storto", mi riferisco ai dati immessi dall'utente...per esempio aver inserito una email già registrata.
In questo caso la pagina riceve un postback completo, dove oltre ad essere indicato un messaggio che identifica l'errore, sarebbe bello che l'utente si ritrovi i dati da lui immessi.
Come dicevo prima, l'unica cosa che si perde è la città selezionata. Penso che ci sia qualche problema con ajax, visto che è l'unico campo che viene riempito attraverso la gestione di un evento.
Devo fare in modo che rimanga selezionata la città precedente.

Spero di esserti stato un po' più chiaro. :)

Wamba Profilo | Expert

Come popoli la dropdownlist?
Sembra che il problema sia nel viewstate che non mantiene il suo valore.
In questo caso puoi verificare il perchè e correggere il tiro in modo che venga memorizzato, ma potrebbe costarti la riscrittura del motore con cui riempi la ddl.
Oppure puoi usare un caro vecchio trucco: salvi in un asp:hiddenfield il valore della key selezionata nella ddl e lato server la ripopoli e setti nuovamente il valore selezionato dall'utente.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

stuzzo Profilo | Junior Member

>Come popoli la dropdownlist?
Guarda se mi aiutassi a farmi capire bene come funziona te ne sarei molto grato :), visto che per popolare la ddl, ho dovuto prendere spunto da un qualcosa già fatto.
Ti posto il codice:

<asp:DropDownList ID="cboProvincia" runat="server" CssClass="ComboBox" DataTextField="NomeProvincia" DataValueField="IDProvincia" OnInit="evt_cboProvincia_Init"/>

protected void evt_cboProvincia_Init(object sender, EventArgs e) //nel code behind
{cboProvincia.Attributes.Add("OnChange", "javascript:Provincia_Changed()");}

function Provincia_Changed() //nell'aspx
{
var ProvinciaCbo = document.getElementById('<%=cboProvincia.ClientID%>');
Registrazione_Registra.evt_cboProvincia_Changed(ProvinciaCbo.options[ProvinciaCbo.selectedIndex].value, Provincia_Changed_Callback);
}

function Provincia_Changed_Callback(response) //Per riempire
{
var ret = response.value
if (response.error != null)
{
alert("Errore Ajax:\n" + response.error.Message);
}
else
{
var CittaCbo = document.getElementById('<%=cboCitta.ClientID%>');
CittaCbo.options.length = 0;
if (ret.Rows.length > 0) {
CittaCbo.disabled = "";
CittaCbo.options[0] = new Option(" ", "0");

for (i=0; i < ret.Rows.length; i++)
{
CittaCbo.options[i+1] = new Option(ret.Rows[i].NomeCitta, ret.Rows[i].IDCitta);
}
} else {
CittaCbo.options[0] = new Option(" ", "0");
CittaCbo.disabled = "disabled";
}
}
}


public DataTable evt_cboProvincia_Changed(string pIDProvincia)
{
DataTable dt = Citta.ElencaPerProvincia(int.Parse(pIDProvincia));
HttpContext.Current.Session["iokCittadt"] = dt;

return dt;
}

>Sembra che il problema sia nel viewstate che non mantiene il
>suo valore.
>In questo caso puoi verificare il perchè e correggere il tiro
>in modo che venga memorizzato, ma potrebbe costarti la riscrittura
>del motore con cui riempi la ddl.
>Oppure puoi usare un caro vecchio trucco: salvi in un asp:hiddenfield
>il valore della key selezionata nella ddl e lato server la ripopoli
>e setti nuovamente il valore selezionato dall'utente.

Ti ho postato tutto :), così cerco di essere il più chiaro possibile ;)
Penso che tu abbia perfettamente colto nel segno......Cerco di provare con il trucchetto, nel frattempo.
Nel caso vedi che il meccanismo sia un po' macchinoso, non esitare dall'insultarmi :)

Ciao e grazie!

Wamba Profilo | Expert

Non ho molto tempo per studiarmi la meccanica della cosa, ma da una rapida occhiata non mi sembra molo "ortodossa", ma neanche sbagliata.
Usi un UpdatePannel? Non ho capito se ti si svuota la ddl o semplicemtne perde la selezione.
Un consiglio: non mettere un datatable in sessione è un oggetto molto pesante e rischi di usare troppa memoria.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

stuzzo Profilo | Junior Member

>Non ho molto tempo per studiarmi la meccanica della cosa, ma
>da una rapida occhiata non mi sembra molo "ortodossa", ma neanche
>sbagliata.
>Usi un UpdatePannel? Non ho capito se ti si svuota la ddl o semplicemtne
>perde la selezione.

Sinceramente non so bene cosa sia un update panel .....La ddl torna disabled completamente, cioè in poche parole è come se fosse la prima volta che viene caricata la pagina, per quello devo cambiare di nuovo la provincia per far riscattare tutto il meccanismo.

>Un consiglio: non mettere un datatable in sessione è un oggetto
>molto pesante e rischi di usare troppa memoria.

Ok, cerco di eliminare questa cosa...

grazie

Wamba Profilo | Expert

L'updatepannel è uno strumento messo a disposizione con l'ajax.net per semplificare lo sviluppo di pagine ajax. (Potremmo discutere su quest'affermazione, ma cerchiamo di semplificare). Nel tuo caso con un apporccio "classico" all'ajax tu popoli manualmente non la dropdownlist, ma il suo corrispondente html. La differenza è fondamentale perchè l'asp.net non è in grado di registrare le tue modifiche e quando deve disegnare la select lo fà secondo le informazioni in suo possesso ovvero vuota.
Per quanto ti riguarda la cosa più semplice è salvarti in un asp:hidden il valore corrente e lato server lanciare la procedura per ripopolare la ddl prima della renderizzazione.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

stuzzo Profilo | Junior Member

Grazie di tutto!
Cerco di risolvere con i consigli da te indicati.
Ti ricontatto se ho altri problemi :)
Ciao

Wamba Profilo | Expert

Tranquillo chiedi pure
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
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 !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5