Errore nel popolamento di una ddl

mercoledì 19 novembre 2008 - 12.04

stuzzo Profilo | Junior Member

Ciao a tutti.
Volevo chiedervi una mano....
Ho una ddl che viene caricata da cb,
DataTable dt = Regione.Elenca();
cboRegione.DataSource = dt;
cboRegione.DataTextField = "NomeRegione";
cboRegione.DataValueField = "IDRegione";
cboRegione.DataBind();
Questo metodo viene invocato in tutte le pagine perchè sta nella master page. Solitamente non dà nessun problema, ma ho scoperto che se sto visualizzando una pagina e torno indietro attraverso il tasto del browser, all'abbandono della pagina in cui sono tornato, mi appare questo errore:
SelectedValue in 'cboRegione' non valido, poiché non è incluso nell'elenco di elementi.
Nome parametro: value
Non capisco il perchè....Mi date un consiglio? grazie

Alfredo Aiello

fguida Profilo | Expert

"".....se sto visualizzando una pagina e torno indietro attraverso il tasto del browser, all'abbandono della pagina in cui sono tornato.....""

Non ho ben capito il problema; l'errore ti si genera quando torni sulla pagina chiamante???

Francesco

stuzzo Profilo | Junior Member

>"".....se sto visualizzando una pagina e torno indietro attraverso
>il tasto del browser, all'abbandono della pagina in cui sono
>tornato.....""
>
>Non ho ben capito il problema; l'errore ti si genera quando torni
>sulla pagina chiamante???
>
>Francesco

Perdonami...
sto nella pagina 1, vado in una pagina 2, adesso attraverso il tasto del browser "indietro" torno alla 1. All'abbandono della pagina 1 mi scatta l'errore.
Spero che sia un po' meglio ora


Alfredo Aiello

Wamba Profilo | Expert

Ciao prova a dirci in che evento di pagina ti crea il problema, solitamente in modalità debug ti dovrebbe anche rare la riga in cui è l'errore.
-----------------------------------------------------------
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

>Ciao prova a dirci in che evento di pagina ti crea il problema,
>solitamente in modalità debug ti dovrebbe anche rare la riga
>in cui è l'errore.
>-----------------------------------------------------------

Ho fatto il debug, l'errore viene generato nel DataBind().
ciao e grazie

Alfredo Aiello

fguida Profilo | Expert

Hai verificato se il tuo datatable non sia vuoto?
Sembrerebbe un errore dovuto alla mancanza di dati...anche se mi aspetterei una ddl vuota. Unica cosa non capisco come mai si verifiche in un back del browser...magari mi replico qui una situazione simile e ti dico (a patto che qualcuno abbia già a soluzione per te)

Francesco

Wamba Profilo | Expert

Il databind me lo aspettavo, ma hai guardato chi ha chiamato quello? L'intero call-stack è importante perchè sembra che chiami il bind di un controllo sul page unload... il che non ha molto senso.
-----------------------------------------------------------
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

Forse ho capito da cosa dipende.....In poche parole mandando indietro con il browser non mi ricarica la pagina e quindi non provvede a svuotarmi e riempirmi di nuovo il controllo. HO messo una pezza controllando il numero degli elementi all'interno della ddl, se = 0 allora riempio sennò lascio perdere. Per adesso sembra che regga.
Vi farò sapere.
Alfredo Aiello

Wamba Profilo | Expert

Il tasto back è uno dei miei peggiori nemici
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

fguida Profilo | Expert

...quindi il dataTable è vuoto quando torni indietro?
Se ti va posta il codice della pagina in modo da vedere bene gli eventi.

Francesco

stuzzo Profilo | Junior Member

@wamba Lo puoi dire forte

>...quindi il dataTable è vuoto quando torni indietro?
>Se ti va posta il codice della pagina in modo da vedere bene
>gli eventi.

if (cboFiltroRegioneMaster.Items.Count == 0)
{
DataTable dt = Regione.Elenca();
cboFiltroRegioneMaster.DataSource = dt;
cboFiltroRegioneMaster.DataTextField = "NomeRegione";
cboFiltroRegioneMaster.DataValueField = "IDRegione";
cboFiltroRegioneMaster.DataBind();
cboFiltroRegioneMaster.Items.Insert(0, new ListItem("Tutte", "0"));
}

Così ho messo una pezza. No al contrario il datatable è riempito, ma la ddl non viene svuotata, probabilmente gli dà fastidio questo. Il metodo che ho appena indicato viene chiamato dalla page master quando (!Page.ISPostBack).
Sicuramente non sarà la soluzione più elegante, ma sembra reggere.

questo è ciò che scrive prima di schiantare
[ArgumentOutOfRangeException: SelectedValue in 'cboFiltroRegioneMaster' non valido, poiché non è incluso nell'elenco di elementi.
Nome parametro: value]
System.Web.UI.WebControls.ListControl.PerformDataBinding(IEnumerable dataSource) +992
System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +98
System.Web.UI.WebControls.ListControl.PerformSelect() +18
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +68
HomePage_Main.locCaricaRegioni() in c:\Inetpub\wwwroot\Web\xxx\HomePage\Main.master.cs:94
HomePage_Main.locCaricaDatiGenerali() in c:\Inetpub\wwwroot\Web\xxx\HomePage\Main.master.cs:82
HomePage_Main.Page_Load(Object sender, EventArgs e) in c:\Inetpub\wwwroot\Web\xxx\HomePage\Main.master.cs:36
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +45
System.Web.UI.Control.OnLoad(EventArgs e) +80
System.Web.UI.Control.LoadRecursive() +49
System.Web.UI.Control.LoadRecursive() +132
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3744

Spero di far capire un po' meglio la problematica
Messaggio di errore:
SelectedValue in 'cboFiltroRegioneMaster' non valido, poiché non è incluso nell'elenco di elementi.
Nome parametro: value

Ciao!




Alfredo Aiello

Wamba Profilo | Expert

Capito. Il browser ti ha ricaricato la pagina con l'ultimo viewstate salvato senza consultare il server (se controlli con un breakpoint alla pressione del tasto back non dovresti passare dal page load della pagina di destinazione, pagina 1 se non erro). Dovresti settare la scadenza della pagina a livello html per essere certo.
-----------------------------------------------------------
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

>Capito. Il browser ti ha ricaricato la pagina con l'ultimo viewstate
>salvato senza consultare il server (se controlli con un breakpoint
>alla pressione del tasto back non dovresti passare dal page load
>della pagina di destinazione, pagina 1 se non erro). Dovresti
>settare la scadenza della pagina a livello html per essere certo.

Ah, perdonami ma adesso non ho ben capito come fare....Come dovrei fare?

Alfredo Aiello
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5