[英]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文件。 例如:
<asp:ContentPlaceHolder id="HideMe" runat="server">
....
</asp:ContentPlaceHolder>
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.