我的母版页有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(右侧栏)。
所以我根本不想要渲染。
我该怎么做?
答案 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文件。例如:
<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规则隐藏div display:none;