Disabilitare lo stato del controllo

martedì 15 dicembre 2009 - 14.58

andrestu Profilo | Expert

Salve,

volevo sapere se cera il modo di disabilitare lo stato del controllo. Facendo un pò di prove ho notato che per esempio nel caso del controllo HiddenField il valore viene mantenuto durante i postback, anche se imposto su "false" la proprietà "EnableViewState" (stessa cosa accade per le proprietà width e height del controllo panel).
Deduco quindi che il valore viene conservato nel control state.

A questo punto la soluzione sarebbe o disabilitare il control state o creare un nuovo controllo ereditando dalla classe HiddenField e facendo l'override di qualche metodo interno utilizzato per salvare il valore nel control state.

E possibile risolvere con una di queste due soluzioni? e se si, qualcuno di voi ha già provato a farlo?

Esistono altre soluzioni in merito?

FrancescoGuadagno Profilo | Senior Member

>Salve,
>
>volevo sapere se cera il modo di disabilitare lo stato del controllo.
>Facendo un pò di prove ho notato che per esempio nel caso del
>controllo HiddenField il valore viene mantenuto durante i postback,
>anche se imposto su "false" la proprietà "EnableViewState" (stessa
>cosa accade per le proprietà width e height del controllo panel).
>Deduco quindi che il valore viene conservato nel control state.
Deduzione giusta

>A questo punto la soluzione sarebbe o disabilitare il control
>state o creare un nuovo controllo ereditando dalla classe HiddenField
>e facendo l'override di qualche metodo interno utilizzato per
>salvare il valore nel control state.
Che io sappia il ControlState non è disabilitabile, è stato creato apposta, proprio perchè le proprietà associate al ViewState erano disabilitabili. Credo quindi che anche con qualche override non risolveresti il problema. L'unica soluzione è creare proprietà tue e gestirle nella maniera più opportuna.

Gluck74 Profilo | Guru

Confermo, lo State Control non si disabilita, quindi se devi fare qualcosa di particolare, ti devi fare un CustomControl.
Ma cosa devi fare che non ho capito?

Se riesci a seguire un webcast in inglese/americano [ io non ce la faccio ;-)) ], questo ti spiega l'utilizzo di State Control e differenza con ViewState:

http://www.asp.net/(S(ywiyuluxr3qb2dfva1z5lgeg))/learn/videos/video-241.aspx

andrestu Profilo | Expert

ok chiedevo per avere la conferma che il control state non si potesse disabilitare.
Lo facevo perchè per esempio nel caso dei controlli Panel ho visto che vengono trasportati avanti e indietro i valori del width ed Height e a me non serve. Era semplicemente x ottimizzare la quantità di dati trasportata. Invece nel caso degli HiddenField volevo evitare che il valore venisse conservato, la scorciatoia sarebbe ripulirli prima del rendering della pagina e dopo che il valore viene ripristinato (parlo del ciclo di vita della pagina), solo che per un motivi che non sto a spiegarvi altrimenti andremo x le lunghe mi viene difficile fare questa pulizia.
L'alternativa sarebbe usare qualche cos'altro oppure costruirmi un custom control tipo un HiddenField che però non conserva il valore nel viewstate.

FrancescoGuadagno Profilo | Senior Member

Ti rispondo solo per "filosofeggiare" un pò
>Lo facevo perchè per esempio nel caso dei controlli Panel ho
>visto che vengono trasportati avanti e indietro i valori del
>width ed Height e a me non serve.
Ok, a te non serve, ma il browser come farebbe a sapere la width e la height da impostare?

> Era semplicemente x ottimizzare
>la quantità di dati trasportata. Invece nel caso degli HiddenField
>volevo evitare che il valore venisse conservato, la scorciatoia
>sarebbe ripulirli prima del rendering della pagina e dopo che
>il valore viene ripristinato (parlo del ciclo di vita della pagina),
>solo che per un motivi che non sto a spiegarvi altrimenti andremo
>x le lunghe mi viene difficile fare questa pulizia.
Gli hiddenField però o li crei tu (e quindi ne puoi gestire il contenuto) oppure sono hidden appositamente create dal framework per il trasporto della ViewState, quindi da non toccare.

andrestu Profilo | Expert

x quanto riguarda gli Hiddenfield ok posso svuotarli e riempirli secondo mia logica ma x quanto riguarda i panel il punto è che se io imposto un valore x width ed height dalle proprietà del controlli in aspnet e successivamente con javascript da browser modifico tali valori, al successivo postback rimangono i valori da me modificati tramite javascript. quindi vuol dire che tali proprietà si comportano un pò come la proprietà value di una textbox.
Oltretutto analizzando il contenuto del browser si vede che cengono salvati in appositi "campi" (penso che siano degli hiddenfield) con la seguente sintassi: id "id del panel + _ClientState" e valore "123,34" (i numeri sono degli esempi).

Gluck74 Profilo | Guru

questo ti dovrebbe dare qualche dritta:
http://visualstudiomagazine.com/Articles/2005/01/01/Manage-Client-State.aspx?Page=1

ciao
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