【发布时间】:2014-01-27 11:41:25
【问题描述】:
我需要根据表/数据集中的值生成一个菜单。该表包含类似于下面的图像数据的数据。主菜单包含 4 个值,产品、应用程序、文档、支持。每个菜单都有其菜单项。
以下是母版页的站点管理员代码:
<asp:Menu ID="Menu1" runat="server" DataSourceID="XmlDataSource1" BackColor="#0072c5"
CssClass="Menu" DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="12px"
ForeColor="#F7F6F3" Width="100%" StaticSubMenuIndent="10px" Orientation="Horizontal"
StaticDisplayLevels="2">
<DataBindings>
<asp:MenuItemBinding DataMember="MenuItem" NavigateUrlField="NavigateUrl" TextField="Text" ToolTipField="ToolTip" />
</DataBindings>
</asp:Menu>
<asp:XmlDataSource ID="XmlDataSource1" TransformFile="~/Default2.xslt" XPath="MenuItems/MenuItem"runat="server"></asp:XmlDataSource>
我生成的 XML 如下。
<Menus ProductName="Acapella Admin">
<Menu MenuID="1" Text="Products">
<MenuItem MenuID="1" Text="ProductInfo" URL="ProductInfo.aspx"/>
<MenuItem MenuID="2" Text="Product Features" URL="ProductFeatures.aspx"/>
<MenuItem MenuID="3" Text="Products Details" URL="ProductDetails.aspx" />
</Menu>
<Menu MenuID="1" Text="Applications">
<MenuItem MenuID="1" Text="MobileApps" URL="MobileApps.aspx"/>
<MenuItem MenuID="2" Text="Web Applications" URL="WebApplications.aspx"/>
<MenuItem MenuID="3" Text="Portal" URL="Portal.aspx" />
</Menu>
<Menu MenuID="2" Text="Document">
<MenuItem MenuID="4" Text="Tutorial" URL="Tutorial.aspx" />
</Menu>
<Menu MenuID="4" Text="Support">
<MenuItem MenuID="5" Text="FAQs" URL="FAQs.aspx" />
<MenuItem MenuID="6" Text="Contact us" URL="ContactUS.aspx" />
</Menu>
</Menus>
还有我的 XSLT 样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<!-- Replace root node name Menus with MenuItems
and call MenuListing for its children-->
<xsl:template match="/Menus">
<MenuItems>
<xsl:call-template name="MenuListing" />
</MenuItems>
</xsl:template>
<!-- Allow for recursive child nodeprocessing -->
<xsl:template name="MenuListing">
<xsl:apply-templates select="Menu" />
</xsl:template>
<xsl:template match="Menu">
<MenuItem>
<!-- Convert Menu child elements to MenuItem attributes -->
<xsl:attribute name="Text">
<xsl:value-of select="Text"/>
</xsl:attribute>
<xsl:attribute name="ToolTip">
<xsl:value-of select="Description"/>
</xsl:attribute>
<xsl:attribute name="NavigateUrl">
<xsl:text>?Sel=</xsl:text>
<xsl:value-of select="Text"/>
</xsl:attribute>
<!-- Recursively call MenuListing forchild menu nodes -->
<xsl:if test="count(Menu) >0">
<xsl:call-template name="MenuListing" />
</xsl:if>
</MenuItem>
</xsl:template>
</xsl:stylesheet>
帮助我生成 XML 并使用 XmlDataSource 将其绑定到菜单。
【问题讨论】:
-
你为什么用
xmlDataSource为什么不用其他数据源? -
实际上我被要求不要使用站点地图,因为每个用户的菜单都不同。上面显示的图像是普通用户。但是对于任何用户,菜单及其项都应该基于 ModuleID 显示。
-
感谢您编辑@Mathias Muller..