带 ASP.NET的xml/xslt动态菜单

分享于 

4分钟阅读

Web开发

  繁體 雙語

介绍

在本例中,我将展示如何集成 XML。层叠样式表( CSS )。XSLT和 C#.NET 用户控件,以创建一个菜单,显示用户查看哪个页面。

背景

这个例子是基于优秀书籍"ASP.NET 网站编程的代码"Bellinaso和 Kevin Hoffman。 我添加了附加功能,以便菜单自动显示当前页。

使用代码

首先,我们需要在XML文件中定义菜单项。

<?xmlversion="1.0"encoding="utf-8"?><NavMenu><MenuItemtitle="Page 1"link="/Page1.aspx"/><MenuItemtitle="Page 2"link="/Page2.aspx"/><MenuItemtitle="Page 3"link="/Page3.aspx"/></NavMenu>

其次,我们需要创建一个级联样式表文件,其中包含格式化菜单项的类。

.Navigator_Item_Cell {
 PADDING-RIGHT: 1px;PADDING-LEFT: 3px;PADDING-BOTTOM: 3px;COLOR: #000099; 
 FONT-STYLE: normal;FONT-FAMILY: Arial
 }.Navigator_Item_Cell_Selected {
 PADDING-RIGHT: 1px;PADDING-LEFT: 3px;PADDING-BOTTOM: 3px;COLOR: #FFffff; 
 FONT-STYLE: normal;FONT-FAMILY: Arial;BACKGROUND-COLOR: #FF3333
 }

.Navigator_Item_Cell_Selected 用于显示当前页面。

XSLT接受 CurrentPage 参数。它将验证哪个菜单项链接包含这里页面,以及与其他所有菜单项的格式。 BaseRef 参数用于根据应用程序名称为菜单项提供有效的超链接。 这里的主要代码是: <xsl:when test="contains(@link, $CurrentPage)"> 它验证是否选择了项菜单,以便将 Navigator_Item_Cell_Selected CSS类分配给它。 对于所有其他项目,Navigator_Item_CellNavigator_Item_Link CSS类都被分配。

<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:paramname="BaseRef">/EDynamicMenu</xsl:param><xsl:paramname="CurrentPage">Page1</xsl:param><xsl:templatematch="NavMenu"><tablewidth="110px"border="0"cellpadding="3px"cellspacing="3px"class="Navigator_Table"><xsl:for-eachselect="MenuItem"><tr><xsl:choose><xsl:whentest="contains(@link, $CurrentPage)"><tdclass="Navigator_Item_Cell_Selected"><xsl:value-ofselect="@title"/></td></xsl:when><xsl:otherwise><tdclass="Navigator_Item_Cell"><aclass="Navigator_Item_Link"><xsl:attributename="href"><xsl:value-ofselect="concat($BaseRef, 
 @link)"/></xsl:attribute><xsl:value-ofselect="@title"/></a></td></xsl:otherwise></xsl:choose>

在用户自定义控件中,"currentpage"信息发送到XSLT文件。

protectedoverridevoid Render( HtmlTextWriter writer )
{
 string baseRef ="";
 currentPage =rex.Replace(Context.Request.Path, ""); 
 //it removes a part of URL till// the last"/" to get the page name if(Context.Request.ApplicationPath.Length> 1)
 baseRef = Context.Request.ApplicationPath; 
 //to ensure proper hyperlinks.  XPathDocument xdoc = 
 new XPathDocument( Context.Server.MapPath( sourceFilePath ) );
 XslTransform xslt = new XslTransform();
 XsltArgumentList xsltArg = new XsltArgumentList();
 xsltArg.AddParam("CurrentPage", "", currentPage);
 xsltArg.AddParam("BaseRef", "", baseRef);
 xslt.Load( Context.Server.MapPath( transformFilePath ) );
 xslt.Transform( xdoc, xsltArg, writer ); 
}

Points of Interest

我相信这是创建灵活的导航菜单,自动显示当前网页的强大方法。


asp  asp-net  动态  菜单  
相关文章