martes, agosto 29, 2006

Usando XML en el Control de Menu de ASP.Net 2.0

Para Gabasys estuve revisando las ventajas y los pros de utilizar en el menu de la aplicación, ya fuera el SiteMap de la aplicación, un acceso a la base de datos o un archivo de xml.


Decidi irme por la ultima opción, creo que puede ser más sencillo el modificar un archivo de xml en el caso de una actualizacion, que tener que generar una instruccion de sql para modificar la base de datos. El SiteMap, decidi que seria parte del control de navegacion y nada mas. De esta manera puedo tener diferentes opciones entre el menu y el sitemap.


Ya al estar programando, no encontraba la forma de que el menu se formara de manera correcta, el archivo xml de pruebas es el siguiente:


<?xml version="1.0" encoding="utf-8" ?>

<menu>

<category text="Pacientes">

<item text="Agregar Nuevo" url="~/pacientes/nuevo.aspx"></item>

<item text="Modificar" url="~/pacientes/modificar.aspx"></item>

<item text="Borrar" url="~/pacientes/borrar.aspx"></item>

</category>

<category text="Consultas">

<item text="Agregar Nuevo" url="~/pacientes/nuevo.aspx"></item>

<item text="Modificar" url="~/pacientes/modificar.aspx"></item>

<item text="Borrar" url="~/pacientes/borrar.aspx"></item>

</category>

</menu>


Puse el componente Menu Contro en el MasterPage de la siguiente manera:


<asp:Menu ID="Menu1" runat="server" DataSourceID="xmlSitioMapa" Orientation="Horizontal">

<DataBindings>

<asp:MenuItemBinding DataMember="item" NavigateUrlField="url" TextField="text" />

<asp:MenuItemBinding DataMember="category" TextField="text" />

</DataBindings>

</asp:Menu>

<asp:XmlDataSource ID="xmlSitioMapa" runat="server" DataFile="~/App_GlobalResources/xmlMenu.xml">

</asp:XmlDataSource>


Pero cuando se ejecutaba la aplicacion en lugar de tener las 2 opciones de Paciente | Consultas, solo obtenia un molesto menu, consulte algunas paginas de Google y encontre la modificación que se debia realizar en un ejemplo de Sonu Kapoor (http://www.xmlpitstop.com/ArticleManagement/DisplayArticle.aspx?ResourceID=83), el cual agrego al XPath para filtrar los datos, algo muy simple que hizo la diferencia:


<asp:Menu ID="Menu1" runat="server" DataSourceID="xmlSitioMapa" Orientation="Horizontal">

<DataBindings>

<asp:MenuItemBinding DataMember="item" NavigateUrlField="url" TextField="text" />

<asp:MenuItemBinding DataMember="category" TextField="text" />

</DataBindings>

</asp:Menu>

<asp:XmlDataSource ID="xmlSitioMapa" runat="server" DataFile="~/App_GlobalResources/xmlMenu.xml" XPath="menu/category">

</asp:XmlDataSource>


Y una vez que se ejecuta, se obtiene lo esperado


MenuControl


Listo!

2 comentarios:

Anónimo dijo...

Excelente. Gracias. Me habia hecho perder bastante tiempo este asunto y ahora lo tengo.

Anónimo dijo...

Muy excelente tip, no lo hice de la manera que lo explicas, lo hice con las propiedas de los controles xml y menu. me ayudaste enormemente.

Gracias