如何访问 Site.Master 页面中的控件?
How to access controls in Site.Master page?
我有一个 Site.Master 页面和文件夹,其中每个 "projects" 都有自己的主页,以及详细信息页面:
~/Site.Master
myProject/Project1.Master
myProject/Project1.aspx
myProject/Project1.cs
我想在 Project1.cs
中使用 FindControl()
来查找 Site.Master
中的标签。
我试过 this.Master.Master
,但 returns 无效
我试过 Page.Master
或 this.Master
但那指的是 Project1.Master
我试过 Page.Parent.Master
但那也是 returns 无效。
有什么想法吗?
谢谢
更新
Site.Master
页面有这个指令...
<%@ Master Language="C#" CodeFile="Site.master.cs" Inherits="Site" %>
Project1.master
文件有这些...
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="TradeEduTeams.master.cs" Inherits="TET_system" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Project1.master的header...
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Trade Education Teams System (TETs)</title>
<asp:ContentPlaceHolder id="ContentPlaceHolderHead" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
...
...
更新 2
这是我的 Site.Master 页面的完整内容...
<%@ Master Language="C#" CodeFile="Site.master.cs" Inherits="Site" %>
<html>
<head id="Head1" runat="server">
<title>Mitec</title>
</head>
<body >
<form id="form1" runat="server">
<table width="100%">
<tr valign="top" align="center" >
<td align="left">
<asp:Image ID="Image2" runat="server" ImageUrl="~/images/Tec-NQ-RGB-218x90.jpg" />
</td>
<td align="center">
<table>
<tr>
<td align="center">
<asp:Image ID="Image3" runat="server" ImageUrl="~/images/mitec.jpg" />
</td>
</tr>
<tr>
<td align="center">
<asp:LoginName Font-Names="Times New Roman" Font-Size="1.2em" ID="LoginName1" FormatString="login: {0}"
CssClass="loginname" runat="server" />
</td>
</tr>
</table>
</td>
<td align="right">
<asp:Image ID="Image1" runat="server" ImageUrl="~/images/Tec-NQ-RGB-218x90.jpg" />
</td>
</tr>
<tr><td colspan="3"> </td></tr>
<tr>
<td colspan="3">
<table>
<tr>
<td style="width:20%" valign="top">
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" ImageSet="Arrows" ExpandDepth="1" OnTreeNodeDataBound="TreeNode_DataBound" OnDataBound="Tree_DataBound"
OnTreeNodeExpanded="TreeNode_Expanded" OnTreeNodeCollapsed="TreeNode_Collapsed" LineImagesFolder="~/TreeLineImages" ShowLines="True">
<ParentNodeStyle Font-Bold="False" />
<HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
<SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px"
VerticalPadding="0px" />
<NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" HorizontalPadding="5px"
NodeSpacing="0px" VerticalPadding="0px" />
</asp:TreeView>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
<div class="menu">
</div>
</td>
<td align="center" style="width:60%" colspan="2" valign="top">
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
更新 3
我想我知道发生了什么。 Site.master
文件可以有 HTML 标签,但 不是嵌套的主文件 !嵌套母版页必须仅引用 内容占位符 ,这样它就不会与 site.master 文件中的 "higher up" 标签冲突。是吗?
听起来您好像在寻找 MasterType 指令。
https://msdn.microsoft.com/en-us/library/c8y19k6h.aspx
基本上,您将 MasterType 指令放在子母版页上并使用它引用 Site.master。
您好,请查看下面的示例,我创建了一个包含主视图的 BasicView 母版页,并且包含了一个包含一些额外控件的嵌套母版页。正如您在 [=26= 中看到的 ContentPlaceHolder1 ] 将替换为 ExtraNested.master 中 ContentPlaceHolder1 内的所有 html 代码
这就是您如何相互引用和连接 2 个母版页..
BasicVew.master:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="BasicView.master.cs" Inherits="WebApplication4.BasicView" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
ExtraNested.master
<%@ Master Language="C#" MasterPageFile="~/BasicView.Master" AutoEventWireup="true" CodeBehind="ExtraNested.master.cs" Inherits="WebApplication4.ExtraNested" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:Button ID="Button1" runat="server" Text="Button" />
所以现在在 ExtraNested.master 的 Button1.click 事件中,您可以尝试使用您的代码找到 BasicView.master 的控制文本框。
注意:BasicView 拥有大部分 HTML 代码,而 ExtraNested 使用 BasicView html 以及它包含的一些额外 html。
我有一个 Site.Master 页面和文件夹,其中每个 "projects" 都有自己的主页,以及详细信息页面:
~/Site.Master
myProject/Project1.Master
myProject/Project1.aspx
myProject/Project1.cs
我想在 Project1.cs
中使用 FindControl()
来查找 Site.Master
中的标签。
我试过 this.Master.Master
,但 returns 无效
我试过 Page.Master
或 this.Master
但那指的是 Project1.Master
我试过 Page.Parent.Master
但那也是 returns 无效。
有什么想法吗?
谢谢
更新
Site.Master
页面有这个指令...
<%@ Master Language="C#" CodeFile="Site.master.cs" Inherits="Site" %>
Project1.master
文件有这些...
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="TradeEduTeams.master.cs" Inherits="TET_system" %>
<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Project1.master的header...
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Trade Education Teams System (TETs)</title>
<asp:ContentPlaceHolder id="ContentPlaceHolderHead" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
...
...
更新 2
这是我的 Site.Master 页面的完整内容...
<%@ Master Language="C#" CodeFile="Site.master.cs" Inherits="Site" %>
<html>
<head id="Head1" runat="server">
<title>Mitec</title>
</head>
<body >
<form id="form1" runat="server">
<table width="100%">
<tr valign="top" align="center" >
<td align="left">
<asp:Image ID="Image2" runat="server" ImageUrl="~/images/Tec-NQ-RGB-218x90.jpg" />
</td>
<td align="center">
<table>
<tr>
<td align="center">
<asp:Image ID="Image3" runat="server" ImageUrl="~/images/mitec.jpg" />
</td>
</tr>
<tr>
<td align="center">
<asp:LoginName Font-Names="Times New Roman" Font-Size="1.2em" ID="LoginName1" FormatString="login: {0}"
CssClass="loginname" runat="server" />
</td>
</tr>
</table>
</td>
<td align="right">
<asp:Image ID="Image1" runat="server" ImageUrl="~/images/Tec-NQ-RGB-218x90.jpg" />
</td>
</tr>
<tr><td colspan="3"> </td></tr>
<tr>
<td colspan="3">
<table>
<tr>
<td style="width:20%" valign="top">
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" ImageSet="Arrows" ExpandDepth="1" OnTreeNodeDataBound="TreeNode_DataBound" OnDataBound="Tree_DataBound"
OnTreeNodeExpanded="TreeNode_Expanded" OnTreeNodeCollapsed="TreeNode_Collapsed" LineImagesFolder="~/TreeLineImages" ShowLines="True">
<ParentNodeStyle Font-Bold="False" />
<HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
<SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px"
VerticalPadding="0px" />
<NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" HorizontalPadding="5px"
NodeSpacing="0px" VerticalPadding="0px" />
</asp:TreeView>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
<div class="menu">
</div>
</td>
<td align="center" style="width:60%" colspan="2" valign="top">
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
更新 3
我想我知道发生了什么。 Site.master
文件可以有 HTML 标签,但 不是嵌套的主文件 !嵌套母版页必须仅引用 内容占位符 ,这样它就不会与 site.master 文件中的 "higher up" 标签冲突。是吗?
听起来您好像在寻找 MasterType 指令。
https://msdn.microsoft.com/en-us/library/c8y19k6h.aspx
基本上,您将 MasterType 指令放在子母版页上并使用它引用 Site.master。
您好,请查看下面的示例,我创建了一个包含主视图的 BasicView 母版页,并且包含了一个包含一些额外控件的嵌套母版页。正如您在 [=26= 中看到的 ContentPlaceHolder1 ] 将替换为 ExtraNested.master 中 ContentPlaceHolder1 内的所有 html 代码 这就是您如何相互引用和连接 2 个母版页..
BasicVew.master:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="BasicView.master.cs" Inherits="WebApplication4.BasicView" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
ExtraNested.master
<%@ Master Language="C#" MasterPageFile="~/BasicView.Master" AutoEventWireup="true" CodeBehind="ExtraNested.master.cs" Inherits="WebApplication4.ExtraNested" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:Button ID="Button1" runat="server" Text="Button" />
所以现在在 ExtraNested.master 的 Button1.click 事件中,您可以尝试使用您的代码找到 BasicView.master 的控制文本框。
注意:BasicView 拥有大部分 HTML 代码,而 ExtraNested 使用 BasicView html 以及它包含的一些额外 html。