簡體   English   中英

如何在 a.aspx 頁面中隱藏內容占位符?

[英]How to hide a content place holder in a .aspx page?

我的母版頁有 3 個內容占位符:

1. left side bar

2. middle content area

3. right side bar

所以它看起來像:

<div id="left"></div>
<div id="content"></div>
<div id="right"></div>

在繼承母版頁的特定視圖頁面 (.aspx) 上,我現在想顯示 #3(右側欄)。

所以我根本不想渲染。

我怎樣才能做到這一點?

要考慮的另一件事是嵌套母版頁。 我在當前項目中正在執行類似的設計布局,並且我們有一個“基本”母版頁,該頁執行了所有腳本,包括頁眉和頁腳,並且只有一個ContentPlaceHolder表示頁眉和頁腳之間的所有內容。 然后,我們有了一個使用基礎母版頁的嵌套母版頁,但是添加了一個右側的“ aside”列。 對於希望右列可見的頁面,我們使用嵌套的母版頁。 對於不需要渲染的頁面,我們使用基本母版頁。

這樣的策略肯定會阻止您的第3列完全呈現(而不是呈現且只是為空,這可能無法實現您想要的布局)。

看起來像這樣:

基本母版頁:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="MasterBase.Master.cs" Inherits="MasterBase" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    ...
    <asp:ContentPlaceHolder ID="head" runat="server" />
</head>

<body>
    <form id="form1" runat="server">
        <!-- HEADER -->
        ...

        <!-- CONTENT -->
        <asp:ContentPlaceHolder ID="bodyContent" runat="server" />

        <!-- FOOTER -->
        ...
    </form>
</body>
</html>

嵌套母版頁

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <asp:ContentPlaceHolder ID="head" runat="server" />
</asp:Content>


<asp:Content ID="Content2" ContentPlaceHolderID="bodyContent" runat="server">
    <!-- CENTER COLUMN -->
    <div id="centerCol">
        <asp:ContentPlaceHolder ID="bodyContent" runat="server" />
    </div>

    <!-- RIGHT COLUMN -->
    <div id="rightCol">
        <asp:ContentPlaceHolder ID="rightColumn" runat="server" />
    </div>
</asp:Content>

根據System.Web.UI.WebControls中的文檔,可以使用ContentPlaceHolder類的Visible屬性。

為此,您需要轉到網頁的CodeBehind文件。 例如:

Child.aspx

<asp:ContentPlaceHolder id="HideMe" runat="server">
    ....
</asp:ContentPlaceHolder>

Child.aspx.vb

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    HideMe.Visible = false
End Sub

另外,正如Jamie Dixon指出的那樣,您還可以使用CSS規則display:none;隱藏div display:none;

有幾種方法可以實現此目標,具體取決於“渲染”的含義。

一種方法是將id應用於每個頁面的body標記,然后使用CSS來隱藏您不想“渲染”的div,例如

#myPage #right{display:none;}

另外,如果“渲染”是指HTML響應中的輸出,則可以用局部視圖替換div。 然后,在運行時,您可以決定要在頁面中包括哪些局部視圖,作為所有控制器繼承的基本控制器的一部分,也可以作為每個控制器的一部分。

使用基本控制器是我復制常規代碼的方式之一,就像在Webforms背后的母版頁中所做的那樣。

最好使用內容占位符進行格式化,然后將實際內容放置在從.master頁面繼承的.aspx文件中。

這樣,您可以在沒有內容的母版中分配3列div,但將它們向左浮動,或者想用CSS對其進行格式化,並使用.aspx中的內容引用將內容放入所需的列中。

PS。 如果您希望創建3列布局,我建議您使用jquery .ui-layout插件,而不要嘗試使用人造列等。

主頁

<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
  ....
</asp:ContentPlaceHolder>

<asp:Panel ID="PanelRightMenu" runat="server">
<asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server">
  ....
</asp:ContentPlaceHolder>
</asp:Panel>

子頁面代碼綁定

this.Master.FindControl("PanelRightMenu").Visible = false;

暫無
暫無

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

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