簡體   English   中英

使用子內容頁面在MasterPage ContentPlaceHolder中隱藏子MasterPage上的面板

[英]Hide Panel on Child MasterPage Inside MasterPage ContentPlaceHolder using Child Content Page

我試圖在各處找到這種解決方案,但是無法使其正常工作。

我有以下代碼。

MasterPage.master:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="My_MasterPage" %>

<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"></asp:ContentPlaceHolder>

ChildMasterPage.master:

<%@ Master Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="ChildMasterPage.master.cs" Inherits="My_ChildMasterPage" %>
<%@ Register TagPrefix="uc1" TagName="FileDirectoryOrganizer" Src="~/Controls/my.ascx" %>


<asp:Content ID="Content7" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<asp:panel id="SideNav" runat="server">

    <aside id="sideBar">

        There are 2 User Controls <asp:uc1> inside of this area

    </aside>

</asp:panel>

<div>
    <asp:ContentPlaceHolder ID="contentBody" runat="server" />
    <hr />
    <h3>Related Topics</h3>
</div>

</asp:Content>

my.aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/SubDirectory/ChildMasterPage.master" AutoEventWireup="true" CodeFile="my.aspx.cs" Inherits="SubDirectory_my" %>
<%@ MasterType VirtualPath="~/SubDirectory/ChildMasterPage.master" %>
<%@ Reference VirtualPath="~/MasterPage.master" %>

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

我在my.aspx代碼中嘗試了以下操作,以從ChildMasterPage.master隱藏“ SideNav”面板:

1)

protected void Page_Load(object sender, EventArgs e)
{
    ContentPlaceHolder cpHolder = this.Master.FindControl("Content7") as ContentPlaceHolder;
    Panel p = cpHolder.FindControl("SideNav") as Panel;
    p.Visible = false;
}

2)

protected void Page_Load(object sender, EventArgs e)
{
    ContentPlaceHolder cpHolder = this.Master.FindControl("ContentPlaceHolder1") as ContentPlaceHolder;
    Panel p = cpHolder.FindControl("SideNav") as Panel;
    p.Visible = false;
}

3)

protected void Page_Load(object sender, EventArgs e)
{
    Panel p = this.Master.FindControl("SideNav") as Panel;
    p.Visible = false;
}

當嘗試加載使用ChildMasterPage的aspx頁面時,所有這些給了我以下錯誤:

 500 - Internal server error.
 There is a problem with the resource you are looking for, and it cannot be displayed.

最終,我希望它不顯示任何樣式,以便在aspx頁面上不使用空格。 這樣的事情,給了我與上面相同的錯誤:

protected void Page_Load(object sender, EventArgs e)
{
    ((Panel)this.Page.Master.FindControl("SideNav")).Style.Add("display", "none");
}

預先感謝您提供的任何幫助。 另外,如果您已經在這里回答了這個問題,我也表示歉意,但是我找不到它。 至少沒有任何效果。 我對C#仍然不太滿意,但是我到了。

謝謝

標記

我認為您在第一種方法中已將Content控件類型轉換為ContentPlaceHolder控件。

我相信代碼應如下所示:

Content cpHolder = this.Master.FindControl("Content7") as Content;

希望這會有所幫助!

我沒有嘗試強迫my.aspx.cs在ChildMasterPage.master上“查看”面板,而是執行以下操作:

my.aspx.cs

public partial class SubDirectory_my : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        My_ChildMasterPage hideMySideBar = this.Master;
        hideMySideBar.HideSideBar();
    }

ChildMasterPage.master

public void HideSideBar()
{
    SideNav.Visible = false;
}

這會將子級母版頁的類強制轉換為新變量,然后該變量可以作用於該子級,或從后面的my.aspx代碼中調用子級母版頁代碼中的函數。 感謝我的同事弄清楚這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM