如何访问 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.Masterthis.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">&nbsp;</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。