Persistere lo stato della proprietà widht del controllo panel

sabato 21 novembre 2009 - 09.45

andrestu Profilo | Expert

vorrei persistere o nel viewstate o nel controlstate lo stato della porprietà width di un controllo panel in modo che mantenga memorizzato il cambiamento di valore durante l'esecuzione della pagina web dopo ogni postback.

L'idea era quella di crearmi un coustom control derivato da panel e fare l'override della proprietà width e specificare che mantenga il suo stato nel viewstate solo che evidentemente l'override di una proprietà non si può fare (se non sbaglio).

Quindi l'altra soluzione sarebbe crearmi da zero il controllo derivando da webcontrol e crearlo uguale ad un panel (esclusa la proprietà width di cui la personalizzerei), a sto punto la domanda è: come faccio ad implementare nel nuovo controllo tutti i metodi e proprietà esattamente come quelle del controllo panel (a parte le mie personalizzazioni che poi inserisco)?
da visualizzazione oggetti se vado sul tipo panel vedo la sua implementazione ma non nel dettaglio, cè il modo per vederla nel dettaglio in modo da riprodurla?

avete qualche altro suggerimento x mantenere lo stato della proprietà width?

FrancescoGuadagno Profilo | Senior Member

Scusa, che tipo di panel stai implementando? Il Panel di ASP.NET?

andrestu Profilo | Expert

si certo, ma comunque la mia domanda è rivolta anche in senso generico.

e cioè come faccio con qualsiasi controllo sia webcontrol che htmlcontrol (textbox, label etc.) a persistere lo stato di alcune prorietà che non lo persistono x definizione.

Diciamo che non ho capito bene una cosa:
una texbox persiste il contenuto di testo che viene immesso da browser dentro la casella anche dopo il postback, ma non capisco come avviene il meccanismo.
Immagino che nel caso di una textbox il contenuto venga inviato in automatico da un submit da browser dopodichè la parte lato server implementa un meccanismo x reinserire i dati postati all'interno della textbox prima del reinvio al browser. Se così avviene penso che non potrò mai persistere una proprietà tipo width ammenochè io non creo un javascript che in automatico mi copi il valore della proprietà width in un controllo di tipo textbox in modo che poi venga inviato tramite il submit, oppure sbaglio?
Ho pensato anche a creare un custom control è nella proprietà width specificare che venga salvato il valore nel viewstate, solo che non credo che aspnet riesca a mantenermela se non implemetno io appunto un meccanismo, giusto?

FrancescoGuadagno Profilo | Senior Member

Il discorso è un pò complesso... Per comprenderlo a fondo devi tanto per cominciare guardarti il concetto di ViewState nonchè il ciclo di vita di una pagina aspx, ad esempio nel link qui sotto.
http://msdn.microsoft.com/en-us/library/ms178472.aspx
Dopodichè, capita la differenza tra ControlState e ViewState, probabilmente a te serve implementare una ControlState. Questo link potrebbe aiutarti. http://www.asp.net/Learn/videos/video-241.aspx


Ti ho chiesto inoltre che tipo di Panel utilizzi perchè in realtà il panel di ASP memorizza in viewstate anche la width, quindi il problema diciamo che non si pone (o almeno non per il caso specifico).
In tutti gli altri casi devi gestire tu la ViewState.

Pe quel che riguarda accedere al codice sorgente di un controllo, qualcosa puoi farla con Reflector ma se il tuo obiettivo è partire da un controllo e estenderne le funzionalità, allora puoi far si che il tuo controllo derivi dalla classe del controllo che vuoi estendere.

fguida Profilo | Expert

Alcuni controlli hanno il Viewstate attivo ed è per questo che "memorizzano" alcune proprietà in modo che anche dopo il Load della pagina sia mantenuto. Non è complesso impostare proprietà con viewstate, però non ho ben capito cosa ti occorre.

Francesco

andrestu Profilo | Expert

si il fatto è che comunque anche se imposti una nuova proprietà (come nel video del control state), poi questa proprietà non ce lhai renderizzata in automatico nel browser o comunque non la puoi manipolare da browser. cioè io vorrei poterla in qualche modo modificarla da browser e poi reinviarla al server con il postback.
cioè riassumendo:
- mi creo un user control o un custom control derivato da un controllo già esistente
- imposto una nuova proprietà e la imposto in modo che salvi o nel view state o nel control state (come da video)

a questo punto io vorrei inserire un volore da browser nella nuova proprietà, in modo che al ritorno del postback mi ritrovo i valori che ho immesso precedentemente. come faccio?

immagino che devo affiancare al mio controllo tipo una textbox o un qualcosa del genere che mi dia la possibilità di inserire un valore da browser e una volta inviata sul server mi copi il valore nella proprietà.

sankyu Profilo | Senior Member

usa una classe css che imposti on page pre render e buona notte! gli stili li puoi modificare come vuoi via codice ed è pure meglio tenere separate le propieta di visualizzazione dal contenuto

andrestu Profilo | Expert

si ma una volta renderizzata uno stile x un controllo poi comunque su browser il problema è sempre lo stesso, rimandare le modifiche dello stile al server tramite postback.
anche in questo caso avrei bisogno di un javascript che mi modifichi lo stile, mi copi i valori tipo in un hiddenfield e mi invii il tutto al server, o ci sono altre possibilità?
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