2010-02-22 15 views
9

Tengo un problema en el que dos controles que se agregan mediante programación están intentando cargar uno al otro viewstate, quiero borrar viewstate antes de cargar los controles, probé Viewstate.Clear pero no hizo nada, cuando desactivo viewstate en el contenedor de mis controles todo funciona bien, excepto que el estado del control no se mantiene. ¿Hay alguna manera de borrar el estado de vista de solo un control específico?¿Cómo borrar Viewstate?

Respuesta

7

Desde su descripción, parece que usted está haciendo uno de los errores comunes al cargar sus controles dinámicos - ya sea que vaya a cargar demasiado tarde o no les está asignando identificadores únicos (y les asigna el mismo ID único cada vez que se produce una devolución de datos).

Si este es realmente su problema, borrar el viewstate no es la acción adecuada a tomar. Es muy sencillo de solucionar, comprobar estos tres enlaces:

http://msdn.microsoft.com/en-us/library/ms972976.aspx

http://www.4guysfromrolla.com/articles/092904-1.aspx

http://geekswithblogs.net/shahed/archive/2008/06/26/123391.aspx

+0

Como complemento: asegúrese de crear sus controles lo antes posible y nunca después de 'Page_Load' . 'Page_Init' es preferido, pero el evento' Page_Load' funcionará. 'Page_PreRender' will ** not ** – Earlz

+0

Agrego mis controles de usuario en ciertos eventos. Los controles de usuario contienen un modal que se presenta para el usuario. No es una opción cargar todos los controles de usuario en page_load porque cada uno de ellos tiene mucha carga y no es necesario obtener todos los datos antes de saber realmente que el usuario lo necesita. Entiendo la respuesta, pero debe haber una solución para borrar el estado de vista para situaciones como la mía. – Nurp

+0

@Nurp debe hacer una nueva pregunta con los detalles para su situación particular. – slugster

0

Suponiendo que ambos controles heredan de System.Web.UI.Control. Puede deshabilitar sus ViewStates individuales estableciendo su EnableViewState en falso. También puede borrar su ViewState, ya que cada control tiene una propiedad ViewState.

+0

El problema es que tendría que hacerlo al sobrecargar el método Render de la página, ya que ViewState se guarda en el ciclo de vida de la página justo antes de que Render sea llamado por el evento SaveViewState. Cualquier otro evento resultaría en que todavía esté allí. –

+0

@Nisssan: ¿Se refiere a si borra la propiedad ViewState en lugar de deshabilitar ViewState? –

+0

Sí. Si lo deshabilita, está bien ... no es necesario borrarlo. Pero si solo quiere aclararlo, tendrá que hacerlo en el evento Render. De lo contrario, lo borrará ... pero incluso antes de Render es SaveViewState ... así que lo agregará. –

0

Asegúrese de que los id de los dos controles agregados mediante programación sean diferentes y que el problema con ViewState desaparezca.

0

Puede desactivar estado de vista en un control específico:

EnableViewState="False" 
5

Sí,

string controlName = "name of control"; 
ViewState[controlName] = null; 
// create control, add it to the page 
2

Si ViewState se interpone en su camino y refugio' t hecho ya, por favor lea

TRULY understanding ViewSate

Te hará sentir mucho más cómodo trabajando con ViewState y todo el ciclo de vida de la página ASP.NET.