2009-08-20 14 views
5

¿Cuál es el recomendado? Déjame explicarte lo que quiero lograr!
Tengo una página utilizada por muchos usuarios, cada usuario tiene un rol diferente como administrador, operador, usuario normal.
Cuando un cliente abre esa página, quiero mostrar un conjunto de controles (botones) que depende de su Rol.
administrador puede hacer xey, pero un usuario normal no puede hacer estas acciones.
ASP .NET: Controles de carga dinámica vs Visible = verdadero

Para lograr lo que quiero hacer, ¿cuál enfoque es el mejor?
¿Debo definir todos los controles en HTML, luego alternar la propiedad Visible o cargar dinámicamente los controles necesarios?


For Visible = false Me preocupa el tiempo de procesamiento del servidor. Incluso si el marcado HTML no se envía al cliente para un control Visible = falso, sé que el control todavía está cargado por ASP .NET y tal vez incluso procesado, pero su resultado HTML no se escribe en el flujo de salida.

Para el control cargado dinámicamente, un inconveniente es que necesitan reiniciarse en Postback, también hay algunos problemas con los eventos y la devolución de datos.

Respuesta

3

No lo haría de forma dinámica, ya que la ganancia no justifica la complejidad o el ahorro percibido. Además, si configura visible = false, tenga en cuenta que viewstate aún está habilitado para sus controles. Si le preocupan los datos de ida y vuelta y se trata de un viewstate más grande, asegúrese de deshabilitar ViewState para todos los controles o para un panel principal que los contenga. Sin embargo, tendrá los mismos inconvenientes para mantener su estado en la devolución de datos que hacerlo de forma dinámica.

Además, hacerlo de forma no dinámica es mucho más fácil de mantener para el siguiente tipo que trabaje con el código. El diseño es obvio y más fácil de visualizar que tratar de descubrir qué código está poniendo dónde.

La creación dinámica de controles realmente no le sirve de mucho, excepto por la exclusión de viewstate y del lado del servidor de procesamiento insignificante. Creo que le resultará difícil incluso medir gran parte de una diferencia notoria, incluso bajo carga entre, un control que no sea viewstate y la sobrecarga de tener que agregarlos dinámicamente según sea necesario.

Por último, es más fácil no hacerlo de forma dinámica, ¿por qué no tomar la ruta más fácil primero y ver si es un problema. Si se convierte en un problema, refínalo cuando sea necesario.

1

.Visible = false es un enfoque bastante razonable para esto. No se preocupe por la velocidad de este método hasta que demuestre, mediante el perfil, que es necesario.

1

¿Qué pasaría si los controles de diferentes funciones en el panel diferente y el panel entero simplemente visible/invisible

+0

enfoque interesante pero no funciona en mi caso. el administrador puede hacer x e y, y un moderador también puede hacer x acción, pero no y –

+0

if (admin) { x.visible = true y.visible = verdadero } –

+0

if (moderador) { x.visible = verdadero y.visible = falso } –

1

Otro inconveniente con los controles dinámicos es la gran cantidad de código quebradizo que usted tiene que escribir para manejarlos, y los dolores de cabeza con depurarlos. A menos que tenga controles extremadamente complejos que consumen mucho tiempo, o si realmente ha identificado un problema de rendimiento, recomendaría encarecidamente el método invisible (y lo hago regularmente). Es el principio de KISS en acción (sin mencionar el principio "no preoptimizar").

Cuestiones relacionadas