如何在.aspx页面中隐藏内容占位符?

时间:2010-07-01 19:21:04

标签: asp.net asp.net-mvc master-pages

我的母版页有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(右侧栏)。

所以我根本不想要渲染。

我该怎么做?

4 个答案:

答案 0 :(得分:3)

要考虑的另一件事是嵌套母版页。我在当前项目中有一个类似的设计布局,我们有一个“基础”母版页,它可以完成我们所有的脚本包括页眉和页脚,并且只有一个ContentPlaceHolder代表页眉和页脚之间的所有内容。然后,我们有一个使用基本母版页的嵌套母版页,但添加了一个正确的“旁边”列。对于我们希望右列可见的页面,我们使用嵌套的母版页。对于我们不希望它呈现的页面,我们使用基本母版页。

这样的策略肯定会阻止你的第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>

答案 1 :(得分:0)

根据“渲染”的含义,有几种方法可以达到这个目的。

一种方法是将id应用于每个页面的body标签,然后使用CSS隐藏你不想使用

之类的'渲染'的div。
#myPage #right{display:none;}

或者,如果通过'render'表示HTML响应中的输出,那么您可以用局部视图替换div。在运行时,您可以决定在页面中包含哪些部分视图,作为所有控制器继承的基本控制器的一部分,或者作为每个控制器的一部分。

使用基本控制器是我复制通用代码的方法之一,就像在webforms中的母版页代码隐藏中所做的那样。

答案 2 :(得分:0)

最好使用内容占位符进行格式化,并将实际内容放在继承自.master页面的.aspx文件中。

通过这种方式,您可以在没有内容的情况下在主服务器中分配3列div,但是将它们向左浮动,或者您希望使用css格式化它们,并使用.aspx中的内容引用将内容放入所需的列。

PS。如果你想创建3列布局我建议使用jquerys .ui-layout插件而不是尝试人造列等。

答案 3 :(得分:0)

根据System.Web.UI.WebControls的文档,您可以使用Visible类的ContentPlaceHolder属性。

为此,您需要转到网页的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规则隐藏div display:none;