网站导航
网站导航
-创建网站地图
解决方案资源管理器 - 右击网站的名称 - 单击 “添加新项” - 对话框中
在 “Visual Studio 已安装的模板”- 单击 “网站地图”- 名称为 “Web.sitemap”
Web.sitemap
<?xml version="1.0" encoding="utf-8"?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="~/Default.aspx" title="主页" description="网站主页">
<siteMapNode url="~/PictureView.aspx" title="图片浏览" description="图片浏览"></siteMapNode>
<siteMapNode url="~/About.aspx" title="个人情况" description="个人情况"></siteMapNode>
<siteMapNode url="~/Reservation.aspx" title="预订餐厅" description="验证控件"></siteMapNode>
</siteMapNode>
</siteMap>
siteMapFile 属性
一个与应用程序相关的引用,如 ~/MySiteMap.sitemap一个虚拟路径,如 /Customers/MySiteMap.sitemap
一个相对于当前站点地图文件位置的路径引用,如 Guests/MySiteMap.sitemap
-添加树样式导航菜单
新建 TreeMap.aspx - 并添加到母版页菜单上 -
工具箱 - 数据 - SiteMapDataSource 控件拖动到页面
工具箱 - 导航 -将 TreeView 控件拖动到页面上
在 TreeView 任务 菜单上,在 选择数据源 框中单击 SiteMapDataSource1
保存页,测试树状导航菜单
可以向应用程序中的每个页添加相同的 SiteMapDataSource 和 TreeView 控件,以便在每个页上都显示导航菜单
可以将导航菜单放置在母版页上,这样导航菜单就会自动出现在每一页中
-显示导航历史记录
打开 TreeMap.aspx - 设计 - 工具箱- 导航-将 SiteMapPath 控件拖到页面上
将光标放置在 SiteMapPath 控件前面 - 按 Enter 创建一个新行 [小节标题]
SiteMapPath 控件显示的所有页名称都是链接,除了最后一个,它表示当前页
通过将 SiteMapPath 控件的 RenderCurrentNodeAsLink 属性设置为 true,您可以将当前节点变为链接
-使用 Menu 控件创建导航菜单
工具箱 - 导航 - Menu 控件-到页面上在 Menu 任务 菜单上- 选择数据源 框- NewDataSource
- 配置数据源 – Datasourcename-向导 - 单击网站地图 - 单击 确定
-在母版页中使用网站导航
打开母版页-
选择ContentPlaceHolder控件-按向左键- 按 Enter-在ContentPlaceHolder 控件的前-插入一个空行工具箱中数据- 将SiteMapDataSource 控件-拖至母版页-将其定位在 ContentPlaceHolder 控件上方
单击 SiteMapDataSource 控件,按向右键,然后按 Enter,在 SiteMapDataSource 控件下面插入一个空行
在 表 菜单中,单击 插入表,然后插入一个含有一行两列且宽度为 100% 的表
从工具箱的 导航 组中,将 TreeView 控件拖动到表的左单元格中
TreeView 选择数据源 SiteMapDataSource1
将 SiteMapPath 控件拖动到表的右单元格
在右单元格中,单击空白区域,然后按 Shift+Enter 创建一个新行
将 ContentPlaceholder 控件拖至表的右单元格,并将其定位在 “SiteMapPath”控件下面
--以编程方式枚举站点地图节点
private void Page_Load(object sender,System.EventArgs e)
{
try
{
string LabelText ="";
Label_CurrentNode.Text = SiteMap.CurrentNode.Title;
if(SiteMap.CurrentNode.HasChildNodes)
{
foreach(SiteMapNode childNodesEnumerator in SiteMap.CurrentNode.ChildNodes)
{
LabelText = LabelText + childNodesEnumerator.Title + "<br />;
}
}
Label_ChildNodes.Text = LabelText;
}
catch(System.NullReferenceException ex)
{
Label_CurrentNode.Text = "The current file is not in the site map.";
}
catch(Exception ex)
{
Label_CurrentNode.Text = "Generic exception: " + e.ToSting()";
}
}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Enumerating Child Site Map Nodes</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<h2>Current Node</h2>
<asp:Label id="Label_CurrentNode" runat="Server"></asp:Label>
<h2>Current Node</h2>
<asp:Label id="Label_ChildNode" runat="Server"></asp:Label>
<asp:SiteMapDataSource id="SiteMapDataSource1" runat="server"/>
<asp:TreeView id="TreeView1" runat="server" dataSourceID="SiteMapDataSource1">
</asp:TreeView>
</form>
</body>
</html>
-Menu 控件
方向 属性可以设置为 垂直 或 水平
-调整 Menu 静态和动态级别
StaticDisplayLevels 属性 设置为 2
-以编程方式控制 ASP.NET 菜单
创建两个协同工作的菜单,它们都绑定到同一个 Web.sitemap 文件
第一个菜单是静态显示的类别菜单。它横跨页的顶部水平显示
第二个菜单水平显示在第一个菜单下面
第二个菜单的内容由第一个菜单中选择的菜单项确定
根据第一个菜单的当前选择,以编程方式调整第二个菜单的网站地图数据源,以便仅显示 Web.sitemap 文件中与选定类别相关的部分
修改 Web.sitemap 文件,使成为三层结构
添加第一个Menu
方向 属性设置为 水平
MaximumDynamicDisplayLevels 设置为 0
确保菜单的任何部分都不会以动态飞出方式出现StaticDisplayLevels 设置为 1
选择数据源 下拉列表中选择 新建数据源
数据源配置向导 中,选择 网站地图
接受默认名称 SiteMapDataSource1
新建数据源
配置第一个数据源
在 Menu 的任务菜单中编辑 MenuItem DataBinding
在 菜单 DataBindings 编辑器 中的 可用数据绑定 下拉列表中,选择 SiteMapNode 然后单击 添加
在 数据绑定属性 下拉列表中,选择 TextField ,然后从下拉菜单中选择 标题
选择 SiteMapDataSource 控件
ShowStartingNode 属性设置为 False
创建第二个菜单
添加第二个Menu
方向 属性设置为 水平
新建数据源
数据源配置向导 中,选择 网站地图
接受默认名称 SiteMapDataSource2
配置第二个数据源
选择 SiteMapDataSource2 并将其 StartingNodeURL 属性设置为 Default.aspx?node=图片浏览
StartingNodeOffset 设置为 -1
ShowStartingNode 设置为 False
添加代码以协调菜单
protected void Menu1_MenuItemClick(object sender,MenuEventArgs e)
{
switch(e.Item.Value)
{
case"图片浏览":
SiteMapDataSource2.StartingNodeUrl ="~/MenuDemo.aspx?node=图片浏览";
return;
case"验证控件":
SiteMapDataSource2.StartingNodeUrl ="~/MenuDemo.aspx?node=验证控件";
return;
case"导航控件":
SiteMapDataSource2.StartingNodeUrl ="~/MenuDemo.aspx?node=导航控件";
return;
}
}