《Programming ASP.NET》学习笔记(母版页和导航)

母版页和导航

 

母版页

母版页提供了共享的HTML,控件和代码,他们可以作为一个模板,供网站内所有页面使用,任何母版页中的内容都会在使用该母版页的页面中显示

添加新项,选择“母版页”,添加一个母版页
在新建的母版页中,已经包含asp:contentplaceholder声明:
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>

在contentplaceholder控件中,可以在该控件周围添加任何内容


添加内容页

使用母版页的页面的所有内容,将被放在母版页的contentplaceholder控件的位置
一个母版页可以有多个contentplaceholder控件

可以在添加web窗体的时候选择“选择母版页”,就可以为子页面选择一个母版页
或者在page指令中添加MasterPageFile属性,值为母版页路径
子页面包含一个page指令,但没有html,form,head,body标签,所有子控件内容都显示在相关母版页的contentplaceholder控件的所在区域

例如:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="content1" Runat="Server">
</asp:Content>

子页面的设计视图中将看到母版页的内容,但不能修改,只能在content控件中添加内容

例如:
<asp:Content ID="Content1" ContentPlaceHolderID="content1" Runat="Server">
    <asp:Label ID="Label1" runat="server" Text="show something"></asp:Label>
</asp:Content>

其中ContentPlaceHolderID用于获取或设置与当前内容关联的ContentPlaceHolder控件的ID


使用嵌套母版页

任何网页都可以与嵌套母版页或者原始母版页组合

添加一个新的母版页,把原来的内容删掉,并作如下修改:
<%@ Master Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
    CodeFile="MasterPage2.master.cs" Inherits="ASP.NET" %>
<asp:Content runat="server" ID="MasterContent" ContentPlaceHolderID="content1">
    <div>
        <asp:ContentPlaceHolder ID="content2" runat="server">
        </asp:ContentPlaceHolder>
    </div>
</asp:Content>

它把之前的MasterPage.master作为母版页,并在Content控件中添加自己的ContentPlaceHolder控件

但子页面使用嵌套母版页时不能使用设计视图


动态编辑母版页

动态编辑母版页就是通过子页面改变母版页的显示内容
可以在母版页中创建公共属性来实现

例如:
在MasterPage.master.cs中添加一个公共属性
public string Lable
{
    set { this.Label1.Text = value; }
}

对应MasterPage.master中的Lable1
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

在子页面中添加MasterType指令用于创建对母版页的引用
<%@ MasterType TypeName="MasterPage" %>

之后就可以在代码文件中修改母版页的内容
protected void Page_Load(object sender, EventArgs e)
{
    this.Master.Lable = "show something";
}

还有一种使用这个属性的方法是采用后期绑定,但相对较慢
例如:
protected void Page_Load(object sender, EventArgs e)
{
    Label lb = Master.FindControl("Lable1") as Label;
    lb.Text = "show something";
}

 

导航


从站点导航开始

新建一个“站点地图”,是一个.sitemap文件
同时站点地图的框架已经搭建好了

例如:
 <?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="" title=""  description="">
        <siteMapNode url="" title=""  description="" />
        <siteMapNode url="" title=""  description="" />
    </siteMapNode>
</siteMap>

title属性定义了链接所要使用的文本
description属性用于定义工具提示

例如:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode title="Programming" description="Contract Programming" url="~/Programming.aspx">
    <siteMapNode title="On-Site" description="On-site" url="~/OnSite.aspx" />
    <siteMapNode title="Off-Site" description="Off-site"  url="~/OffSite.aspx" />
  </siteMapNode>
</siteMap>

站点地图文件包括一个单独的<siteMap>元素,用来定义命名空间:
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >

在siteMap元素中只能嵌套一个<siteMapNode>元素,而<siteMapNode>元素中可以嵌套多个<siteMapNode>元素


建立页面

为了使用站点地图,必须先创建一个母版页
并将一个SiteMapDataSource控件放到母版页中
注意:添加到母版页的控件必须置于ContentPlaceHolder控件外,form标签之内
默认情况下,SiteMapDataSource控件将搜索并使用Web.sitemap文件

构建一个健全的导航,须创建网站地图和面包屑

插入一个TreeView控件
点击智能标签,在“选择数据源”中选择刚创建的SiteMapDataSource控件数据源
它将成为一个树形导航控件

插入一个SiteMapPath控件
它将自动生成面包屑,即链接导航

注意:
TreeView控件的节点可以折叠或展开
面包屑通过SiteMapPath控件实现,它将显示如何到达当前页,如何回到首页


定制外观和操作

TreeView控件可以使用“自动套用格式”设置样式
或者通过设置控件属性设置节点样式

TreeView控件方法
方法  说明
CollapseAll 折叠所有树节点
ExpandAll 展开所有树节点
FindNode 检索指定值路径处的TreeNode对象

TreeView控件事件
事件   说明
SelectedNodeChanged 当节点被选中时发生
TreeNodeCheckChanged 当节点的多选框状态被修改时发生
TreeNodeCollapsed 当节点被折叠时发生
TreeNodeExpanded 当节点被展开时发生
TreeNodePopulate 当PopulateOnDemand属性为true的节点展开时发生

SiteMapPath控件也可以使用“自动套用格式”设置样式
或者通过设置控件属性设置节点样式
通过“编辑模板”可以设置NodeTemplate,CurrentNodeTemplate,RootNodeTemplate,PathSeparatorTemplate的样式

其中PathSeparator属性可用于设置用于分隔菜单项路径的字符
ParentLevelsDisplayed属性可用来显示显示节点层数


按需呈现

可以让TreeView按需呈现,即不是一次加载所有节点,而是按需加载显示

首先修改TreeView的标签为非自封闭标签,并添加ExpandDepth属性
ExpandDepth属性获取或设置第一次显示TreeView控件时所展开的层次数

再给TreeView控件添加DataBindings元素,并在该元素中添加TreeNodeBinding控件,并设置DataMember属性来应用树节点绑定的值

例如:
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" ExpandDepth="0">
<DataBindings><asp:TreeNodeBinding DataMember="SiteMapNode" /></DataBindings>
</asp:TreeView>


使用菜单导航

可以使用Menu控件代替TreeView控件
添加一个Menu控件,设置DataSourceID属性为SiteMapDataSource控件的id
例如:
<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1">
</asp:Menu>

可以使用Orientation属性设置Menu控件的呈现方向,默认为Vertical


以编程方式遍历站点地图的节点

通过代码可以遍历站点地图的节点
例如:
this.Label1.Text = SiteMap.CurrentNode.Title;

if (SiteMap.CurrentNode.HasChildNodes)
{
    foreach (SiteMapNode childNode in SiteMap.CurrentNode.ChildNodes)
    {
        this.Label2.Text += childNode.Title + "<br/>";
    }
}

其中SiteMap用来呈现网站导航结构,SiteMap对象由站点地图提供程序创建
CurrentNode返回一个SiteMapNode类型的对象,其Title属性返回其标题
HasChildNodes属性返回一个布尔值,表示该节点是否有子节点
并通过ChildNodes属性返回的SiteMapNodeCollection对象遍历子节点

 

基于安全的过滤


启用成员资格


添加角色


添加登录页面


创建访问规则


创建权限驱动的站点地图 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值