2009-05-14 16 views
5

¿Cuándo es seguro deshabilitar viewstate? ¿Para qué controles? ¿Bajo qué circunstancias?¿Cuándo es seguro deshabilitar viewstate?

En un control de usuario que tienen estado de vista desactivado, pero si intento hacer clic en este control

<asp:LinkButton ID="LinkButton1" runat="server" 
    CommandName="Delete" 
    OnClientClick="return confirm('¿Está seguro que desea eliminar el mensaje?');" 
    EnableViewState="true"> 
    <asp:Image ID="ImageButton1" runat="server" ImageUrl="~/Content/Images/delete.png" 
     ToolTip="Eliminar mensaje" /> Eliminar 
</asp:LinkButton> 

me sale una excepción System.InvalidOperationException. Está dentro de un ListView.

Respuesta

3

La mayoría de los controles se comportan como es de esperar con viewstate deshabilitado. Los controles más "dinámicos" con funcionalidad incorporada como Gridviews tienden a no funcionar bien sin viewstate.

¿Está seguro de que la excepción está relacionada con viewstate dado que tiene la propiedad enableviewstate establecida en true en su control?

+0

así, la excepción fue porque no se estableció la propertie DataKeyNames. Pero la pregunta es igualmente válida, ¿no? – eKek0

0

Siempre puede deshabilitar el estado de visualización. Si lo hace, debe buscar otras formas de mantener el estado de la página si es necesario. De camino es utilizar los métodos anticuados de campos de formulario ocultos.

Siempre que no coloque objetos grandes y complejos en viewstate, normalmente no hay razón para deshabilitarlo.

8

Todo se reduce a si desea o no que la página recuerde cosas en las devoluciones. Si vuelve a crear o asignar valores a cada estado de vista de devolución de datos no es necesario

Here's unos buenos indicadores

valor dinámicamente inserta en los controles (Por la unión o asignar mediante programación) - Los valores de este controles no se conservará cuando se reintegra, por ejemplo Cambiar de view1 a view2. Pero usted tiene que considerar dos cosas, si piensa repoblar los valores para cada renderizar es pesada para implementar entonces no desactivar el estado de vista, si no entonces es posible desactivarlo y reinicializarlas controles de rendir evento. ¿Por qué estoy sugiriendo esto? Es porque procesar el código del servidor es mucho más rápido que transferir una gran cantidad de datos al servidor y al cliente en viajes de ida y vuelta.

En Datalist y DropDownList - Si no está utilizando el evento OnSelectedIndex Change, puede deshabilitar viewstate.

En Gridviews: esta es la parte más difícil de decidir si desactivar viewstate o conservarlo. Si está solo mostrando datos en él o incluso usándolo solo para la selección, entonces deshabilita ViewState. Si es utilizando paginación, editar o eliminar la funcionalidad , entonces no. Gridview tiene la capacidad de visualización más grande para que lo use con prudencia. Si tiene que actualizar hasta 5 columnas, entonces ¿por qué no solo abre otra vista? Entonces configure los valores allí para actualizarse más bien que actualizarlo en la vista de cuadrícula directamente.

0

Si está utilizando .net framework 2.0 o una versión superior de la infraestructura, entonces podría usar una nueva función denominada control state en lugar de view state. Es mucho más rápido en términos de rendimiento en comparación con viewstate.

Para más detalles, véase más adelante sitios ...

http://www.pluralsight.com/community/blogs/fritz/archive/2004/07/01/472.aspx

http://msdn.microsoft.com/en-us/magazine/cc163901.aspx

http://www.codeproject.com/KB/user-controls/TestControlStateEx.aspx