惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
H
Heimdal Security Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
C
Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Hacker News
The Hacker News
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
S
Securelist
P
Privacy International News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
博客园 - 叶小钗
J
Java Code Geeks
V
V2EX
博客园 - Franky
Spread Privacy
Spread Privacy
K
Kaspersky official blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Simon Willison's Weblog
Simon Willison's Weblog
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
C
Cybersecurity and Infrastructure Security Agency CISA
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
NISL@THU
NISL@THU
罗磊的独立博客
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
V
Visual Studio Blog

博客园 - IMustDo

Delphi TWebBrowser编程简述(转帖) delphi 如何将XML格式的字符串导入ClientDataSet中 用WebBrowser实现HTML界面的应用 delphi TStringList的用法 使用VSS 的Shadow folder的一点问题 Delphi 字符串操作 delphi 最快速编码 URLDecode URLEncode Delphi 2007 如何安装控件 Javascript+xmlhttp调用Webservice以及注意事项 .NET 3.5和VS 2008中的ASP.NET AJAX(转帖) VS.net 2008 beta2 新功能 VS 2008 和 .NET 3.5 Beta 2 发布了(转帖) .Net平台开发的技术规范与实践精华总结(转载收藏) 35 岁前程序员要规划好的四件事(转载) ASP.NET程序中常用的三十三种代码(转载) 40种网站设计常用技巧(转载) Visual C#常用函数和方法集汇总(收藏) 用缓存吧,反正现在内存白菜价,不用白不用。 在MasterPage中使用javascript获取对象
访问母版页上的成员
IMustDo · 2006-12-12 · via 博客园 - IMustDo

 以编程方式使用 ASP.NET 母版页 
可以使用母版页以编程方式执行许多公共任务,包括:

访问在母版页上定义的成员(包括公共属性

/方法或控件)。

动态地将母版页附加到内容页。

访问母版页上的成员
为了提供对母版页成员的访问,Page 类公开了 Master 属性。若要从内容页访问特定母版页的成员,可以通过创建 @ MasterType 指令创建对此母版页的强类型引用。可使用该指令指向一个特定的母版页。当该内容页创建自己的 Master 属性时,属性的类型被设置为引用的母版页。

例如,可能有一个名为 MasterPage.master 的母版页,该名称是类名 MasterPage_master。可用创建类似于以下内容的 @ Page 和 @ MasterType 指令:

<%@ Page  masterPageFile="~/MasterPage.master"%> <%@ MasterType  virtualPath="~/MasterPage.master"%> 

当使用 @ MasterType 指令时(如本示例中的指令),可以引用母版页上的成员,如下面的示例所示:

CompanyName.Text 

= Master.CompanyName;

该页的 Master 属性的类型已设置为 MasterPage_master。

获取母版页上的控件的值
在运行时,母版页与内容页合并,因此内容页的代码可以访问母版页上的控件。(如果母版页的 ContentPlaceHolder 控件中包含一些控件,则这些控件被内容页的 Content 控件重写后将不可访问。)这些控件是受保护的,因此不能作为母版页成员直接访问。但是,可以使用 FindControl 方法定位母版页上的特定控件。如果要访问的控件位于母版页的 ContentPlaceHolder 控件内部,必须首先获取对 ContentPlaceHolder 控件的引用,然后调用其 FindControl 方法获取对该控件的引用。

下面的示例演示如何获取对母版页上的控件的引用。其中一个被引用的控件位于 ContentPlaceHolder 控件中,另一个则不是。

// Gets a reference to a TextBox control inside a ContentPlaceHolder 
ContentPlaceHolder mpContentPlaceHolder; 
TextBox mpTextBox; 
mpContentPlaceHolder 
= (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1"); 
if(mpContentPlaceHolder != null

   mpTextBox 
= (TextBox) mpContentPlaceHolder.FindControl("TextBox1");
   
if(mpTextBox != null) { mpTextBox.Text = "TextBox found!"; } 

// Gets a reference to a Label control that is not in a  
// ContentPlaceHolder control 
Label mpLabel = (Label) Master.FindControl("masterPageLabel"); 
if(mpLabel != null

   Label1.Text 
= "Master page label = " + mpLabel.Text; 

如上所示,可以使用 FindControl 方法访问母版页 ContentPlaceHolder 控件的内容。如果 ContentPlaceHolder 控件已与 Content 控件的内容合并,ContentPlaceHolder 控件将不会包含自己的默认内容。相反,它将包含在内容页中定义的文本和控件。

动态地附加母版页
除了以声明方式指定母版页(在 @ Page 指令或配置文件中)外,还可以动态地将母版页附加到内容页。因为母版页和内容页会在页处理的初始化阶段合并,所以必须在此前分配母版页。通常,在 PreInit 阶段动态地分配母版页,如下面的示例所示:

void Page_PreInit(Object sender, EventArgs e)
{    
this.MasterPageFile = "~/NewMaster.master";
}

动态母版页的强类型
如果内容页使用 @ MasterType 指令将一个强类型赋给了母版页,该类型必须适用于动态分配的所有母版页。如果要动态地选择一个母版页,建议您创建一个基类,并从此基类派生母版页。此基母版页类随后可以定义母版页共有的属性和方法。在内容页中,当使用 @ MasterType 指令将一个强类型赋给母版页时,可以将类型赋给该基类而不是单个母版页。

下面的示例演示如何创建可以由多个母版页使用的基母版页类型。本示例包括一个从 MasterPage 控件派生的基类型、两个从该基类型继承的母版页和一个允许用户使用查询字符串 (

?color=green) 动态选择母版页的内容页。此基主控类型定义了名为 MyTitle 的属性。其中一个母版页重写此 MyTitle 属性,另一个母版页没有重写。内容页将 MyTitle 属性作为页标题显示。因此,页标题将因所选择的母版页而异。

这是基母版页类型。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class BaseMaster : System.Web.UI.MasterPage
{
    
public virtual String MyTitle
    {
        
get { return "BaseMaster Title"; }
    }
}

这是第一个母版页,它显示蓝色背景。注意,@ Master 指令中的 Inherits 属性引用基类型。

<%@ Master Language="C#" Inherits="BaseMaster" ClassName="MasterBlue" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
 
<script runat="server"> 
// No property here that overrrides the MyTitle property of the base master. 
</script> 
<html > 
<head id="Head1" runat="server"> 
<title>No title</title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div style="background-color:LightBlue"> 
   
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> 
      Content from MasterBlue. 
   
</asp:contentplaceholder> 
</div>
</form> 
</body> 
</html> 
这是第二个母版页。除了显示绿色背景以及重写了基类型中定义的 MyTitle 属性外,它与第一个母版页相同。
<%@ Master Language="C#" Inherits="BaseMaster" 
    ClassName
="MasterGreen" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
    
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><script runat="server">
    
public override String MyTitle
    { 
        
get { return "MasterGreen Title"; } 
    }
</script><html  >
<head id="Head1" runat="server">   
    
<title>No title</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div style="background-color:LightGreen">
        
<asp:contentplaceholder id="ContentPlaceHolder1" 
            runat
="server">
            Content from MasterGreen.
        
</asp:contentplaceholder>
    
</div>
    
</form>
</body>
</html>

这是内容页,它允许用户基于由请求提供的查询字符串来选择母版页。使用 @ MasterType 指令将强类型赋给母版页的Master 属性时,该指令引用基类型。

<%@ Page Language="C#" Title="Content Page" %>
<%@ MasterType TypeName="BaseMaster" %>
<script runat="server">
    
protected void Page_PreInit(Object sender, EventArgs e)
    {
        
this.MasterPageFile = "MasterBlue.master";
        
if(Request.QueryString["color"== "green")
        {
            
this.MasterPageFile = "MasterGreen.master";
        }
        
this.Title = Master.MyTitle;
    }
</script><asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" 
        Runat
="Server">
    Content from Content page.
</asp:Content>