嗯,我有些困惑!
'简单问题'
根据ContentPlaceHolder是否为空,我想要以不同方式呈现我母版页的部分内容。
所以:
我有一个母版页,如某些代码:
<% if (ContentPlaceHolder1.HasControls()) {%>
<div id="LittleDiv">
<% } else { %>
<div id="BigDiv">
<% } %>
some text
</div>
<% if (ContentPlaceHolder1.HasControls()) {%>
<div id="Div1">
yadda yadda yadda
[<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"/>]
blah blah blah
</div>
<% } %>
我的页面有一些代码:
<asp:Content ID="Content1" runat="server" contentplaceholderid="ContentPlaceHolder1">
<% if (Model.SomeValue) { %>
hello!
<% } %>
</asp:Content>
(注意:对于每个内容占位符,示例页面的嵌入代码块中的逻辑对于每个页面可能是唯一的!)
这看起来不错,但它不起作用。 问题是我看到的(警告我可能完全错了!)。嵌入式代码块在对象Render中进行评估。直观地说,页面似乎可以控制主人。因此,在页面渲染之前调用母版页的渲染。这意味着母版页始终可以看到页面内容控件中的内容。
这周围有一个很好的方式吗? (我有一点解决方案,但它是一个可怕的黑客!我不会发布它因为我不想影响思考。)
答案 0 :(得分:1)
好的,这是另一个想法:)。而不是将逻辑放在母版页中......
<% if (ContentPlaceHolder1.HasControls()) {%>
<div id="LittleDiv">
<% } else { %>
<div id="BigDiv">
<% } %>
some text
</div>
为什么不为它创建一个占位符? e.g。
<asp:ContentPlaceHolder ID="LittleBigDivPlaceHolder" runat="server" />
然后,您可以允许具体的非母版页面来决定内容。您还可以通过将逻辑移动到部分视图中来避免重复自己,该部分视图可能会被您的不同视图参数化。
答案 1 :(得分:0)
您的母版页可以检查ViewData字典的内容并从那里运行其逻辑,而不是查找结果控件吗?
答案 2 :(得分:0)
或者,您可以使用javascript来显示/隐藏客户端上的div。