Menú en fichero XML


Truco de ASP.NET - Menú en fichero XML


Se trata de crear un control de usuario que muestre el menu de una web a partir de los datos almacenados en un fichero XML. Los datos del fichero XML se almacenarán en la caché del servidor, de esta forma la carga del menú será muy rapida, en lugar de tener que cargar los datos cada vez desde disco, o de una base de datos si los almacenáramos en una base de datos.
Aquí alguno se preguntará porque no introducir las opciones del menu directamente en el control de usuario: pues bien, eso es menos elegante, menos portable, más engorroso de actualizar y además, introduciendo los datos en un fichero XML, podremos administrar el menu desde una página en el panel de control de la web, simplemente cargando el fichero en un dataset y creando las opciones oportunas para modificarlo.

En el ejemplo, supondremos un menú como el de foros del web, es decir un dropDownList con autoPostBack="true" ademas de un botón "ir" que permita realizar la acción en caso de que el autoPostBack no se ejecute en el cliente; esto lo hago por sencillez y también porque me apetece , pero vamos, adaptarlo a un datalist u otra cosa es un ejercicio trivial.


-----------------------------------------------------------------------------------
MENU.ASCX (Control de usuario)
-----------------------------------------------------------------------------------

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.IO" %>






runat="server"
AutoPostBack="true"
OnSelectedIndexChanged="click_ddlMenu" />

ImageUrl="images/bot_ir.gif"
OnClick="click_ir"
runat="server"/>


' A esta última parte cada uno que le de el formato que quiera, yo solo pongo los controles necesarios

-----------------------------------------------------------------------------------



y ahora el fichero XML:


-----------------------------------------------------------------------------------
MENU.XML
-----------------------------------------------------------------------------------




Principal
../principal/principal.aspx


Insertar
../insertar/insertar.aspx


Modificar
../modificar/modificar.aspx



-----------------------------------------------------------------------------------

Cada uno que le ponga las secciones que necesite, claro

Bueno, una última observacion: en las url del fichero .xml he metido direcciones relativas, para que esto funcione, el servidor debe estar organizado de forma que, por ejemplo, la dirección relativa de la pagina "principal" sea la misma tanto si estamos en la pagina "insertar" como si estamos en la pagina "modificar" como si estamos en la propia pagina "principal", no se si me entiende, la estructura sería algo como esto

/
|
+- principal/
| |
| +- principal.aspx
|
+- insertar/
| |
| +- insertar.aspx
|
+- modificar/
| |
| +- modificar.aspx
|
+- menu/
|
+- menu.ascx
+- menu.xml

De todas formas, en lugar de url's relativas podrían ponerse url's absolutas, aunque habria que modificarlas si en algun momento cambiamos el host.
Más trucos de Trucos de asp.net

Trucos más leídos