【问题标题】:Get element of nested master page from content page从内容页面获取嵌套母版页的元素
【发布时间】:2014-06-16 15:29:26
【问题描述】:

我有一个母版页、一个嵌套母版页和一个内容页: 大师(Site.master):

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head runat="server"> 
</head>
<body>
    <form runat="server">
    <asp:ScriptManager ID="ScriptManager" runat="server" />

     <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
                    IncludeStyleBlock="true" Orientation="Horizontal" RenderingMode="List">
                    <StaticSelectedStyle BackColor="LightBlue" BorderStyle="Solid" BorderColor="Black"
                        BorderWidth="1" />
                    <Items>
                        <asp:MenuItem NavigateUrl="~/xxx.aspx" Text="xxx" />
                        <asp:MenuItem NavigateUrl="~/xxx/xxx/xxx.aspx" Text="xxx" />

                    </Items>
                </asp:Menu>
     <div class="main">
        <asp:ContentPlaceHolder ID="cuerpo" runat="server" />
     </div>
    </form>
</body>
</html>

嵌套母版页(mOperator.master)

<%@ Master Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="mOperator.master.cs"
    Inherits="aplicacion_operadores_mOperador" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="Server">
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="cuerpo" runat="Server">
    <div class="clear hideSkiplink" id="capaMenu">
        <asp:Menu ID="subMenuOperator" runat="server" CssClass="menu" EnableViewState="false"
            IncludeStyleBlock="true" Orientation="Vertical" RenderingMode="List">
            <StaticSelectedStyle BackColor="LightBlue" BorderStyle="Solid" BorderColor="Black"
                BorderWidth="1" />
            <Items>
                <asp:MenuItem NavigateUrl="~/yyyy.aspx" Text="yyy" />
                <asp:MenuItem NavigateUrl="~/yyy/yyy/yyyy.aspx" Text="yyyy" />

            </Items>
        </asp:Menu>
    </div>
    <asp:ContentPlaceHolder ID="masterRight" runat="server">
    </asp:ContentPlaceHolder>
</asp:Content>

内容页面:

<%@ Page Title="" Language="C#" MasterPageFile="~/yyy/yyyy/mOperator.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="operators_Default" %>


<asp:Content ID="Content1" ContentPlaceHolderID="masterRight" Runat="Server">

</asp:Content>

现在,如果我想从内容访问母版页的菜单:

 Menu miPrincipal = (Menu)Master.Master.FindControl("NavigationMenu");
        miPrincipal.Items[1].Selected = true;

我成功获得了价值。但是……

如果我想访问嵌套母版页的菜单。我正在尝试这样:

 Menu miSecundario = (Menu)Master.FindControl("subMenuOperator");
 miSecundario.Items[1].Selected = true;

但是给我null。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net visual-studio-2010 master-pages content-pages


    【解决方案1】:

    试试这样的

    Menu mymenu = this.Page.Master.FindControl("cuerpo").FindControl("Content2").FindControl("subMenuOperator") as Menu;
    

    【讨论】:

    • 再次为空。如果我尝试只获取内容:ContentPlaceHolder holder = (ContentPlaceHolder)this.Page.Master.FindControl("Content2"); 它也给了我 null。
    • 试试这个看看 ContentPlaceHolder holder = (ContentPlaceHolder)this.Page.Master.FindControl("cuerpo").FindControl("Content2");
    【解决方案2】:

    我明白了:

     Menu mymenu = this.Page.Master.Master.FindControl("cuerpo").FindControl("subMenuOperator") as Menu;
    

    【讨论】:

      【解决方案3】:

      你应该使用strongly typed Master Page

      在您的母版页 mOperator 中公开菜单:

      public Menu SubMenuOperator
      {
          get
          {
              return this.subMenuOperator;
          }
      }
      

      将主类型添加到内容页面

      <%@ MasterType VirtualPath="~/mOperator.master" %>
      

      然后您可以使用以下命令访问菜单:

       Menu menu = this.Master.SubMenuOperator;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多