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 1.0/1.1
ListItemCollection in un controllo web personalizzato.
giovedì 06 novembre 2008 - 16.28
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
gio 6 nov 2008 - 16:28
Ho visto che la ListItemCollection non è serializzabile e non viene salvata nella ViewState...
cercando su internet ho trovato quello che dovrebbe fare per me...
ecco il link:
http://www.codenewsgroups.net/group/microsoft.public.dotnet.framework.aspnet.webcontrols/topic7569.aspx
però il codice non mi funziona.. da premettere che nel mio controllo personalizzato ho 2 "listbox"
e quindi ho cambiato i due metodi SaveViewState e LoadViewState in questo modo:
(ItemsForm rappresenta la prima ListitemCollection ItemsTo la seconda)
protected override object SaveViewState()
{
Pair pair = new Pair();
pair.First = base.SaveViewState();
Pair pair2 = new Pair();
if (itemsFrom != null) pair2.First = ((IStateManager)itemsFrom).SaveViewState();
if (itemsTo != null) pair2.Second = ((IStateManager)itemsTo).SaveViewState();
pair.Second = pair2;
return pair;
}
protected override void LoadViewState(object savedState)
{
Pair pair = (Pair)savedState;
if (pair != null)
{
if (pair.Second != null && pair.Second.GetType()==typeof(Pair))
{
Pair pair2 = (Pair)pair.Second;
if (itemsFrom == null) itemsFrom = new ListItemCollection(); // queste si sono rese necessari in quando mi sono accorto che andanto a fare le rispettive LoadViewState andava in NullReferenceException
if (itemsTo == null) itemsTo = new ListItemCollection();
if (pair2.First != null)
{
((IStateManager)itemsFrom).LoadViewState(pair2.First);
}
else
{
((IStateManager)itemsFrom).TrackViewState(); // questa invece poichè ho notato che se non viene usato il metodo add di uno dei 2 collection alla fine sembrava non salvare lo stato del controllo..
//nota 1
}
if (pair2.Second != null)
{
((IStateManager)itemsTo).LoadViewState(pair2.Second);
}
else
{
((IStateManager)itemsTo).TrackViewState();
//nota 1
}
}
base.LoadViewState(pair.First);
}
}
Alla fine di tutto questo non funziona niente..
o meglio il primo caricamente della pagina va bene..
caricando la pagina ho solo la prima collection valorizzata.. dal controllo
il controllo non dovrebbe fare altro che spostare con script client gli elementi dal primo al secondo.
quindi facendo una banale postback senza spostare alcun elemento, continua a funzionare, appena sposto un solo elemento dalla prima lista alla secondo e faccio il postback mi accorgo che il programma entra nell'else delle if che ho contrassegnato come //nota 1
Qualcuno saprebbe aiutarmi..sinceramente il codice l'ho copiato bovinamente senza riuscire a capire il funzionamento..
e soprattutto come posso risolverlo?
Ho provato a usare la Session per memorizzare i dati, ma alla lettura gli items non mi cambiano se non dopo il secondo postback poichè se un pulsate tipo submit fa il postback, prima scatena l'evento page_load, poi va nel submit e poi elabora i controlli e quindi cambierebbe le session..per cui sarebbero necessatrie 2 postback consecutive per avere quello che volgio in questo caso...
ma rpeferirei una sintassi ed una logica più pulita..
sono fermo da settimane su sto controllo..aiutoooo
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 !