我有一个 ASP.Net 页面,其中我将页面上的几个元素封装在我的母版页上的一个标记中,以便我可以将样式作为一个单元应用于 div 中的所有内容。这在几个地方都可以正常工作,但有时 div 不会在客户端 HTML 中呈现,所以我的样式永远不会出现。
由于公司政策,我无法包含实际的源代码。但是,代码看起来像这样:
<div id="SideBarArea" class="SideBarStyle" runat="server">
<div id="Top">
<asp:ContentPlaceHolder="TopPlaceHolder" runat="server"/>
</div>
<div id="Bottom">
<asp:ContentPlaceHolder="BottomPlaceHolder" runat="server"/>
</div>
</div>
Top 和 Bottom div 出现在呈现的 HTML 中,但 SideBarArea 没有——或者至少不总是这样。
实际上,我有几个在应用程序生命周期内创建的类似母版页。这些页面是相似的,并且都有 Top 和 Bottom div,但它们被赋予了不同的名称。这些 div 位于屏幕的左侧,逻辑上形成一个侧边栏区域;然而,从历史上看,它们并没有被绑定在一起,除了通过它们在屏幕上的位置以图形方式进行绑定。
我有一个新要求,即根据应用程序逻辑启用或禁用侧边栏区域。为此,已进入所有母版页并将顶部和底部 div 包装在名为 SideBarArea 的新 div 中,以启用或禁用包装器 div。对于大多数母版页,这种方法效果很好,但是在其中一个上,SideBarArea div 没有在最终标记中呈现,并且在后面的代码中对应的 HtmlGenericControl 为 null。
在我写这篇文章的时候,我的伙伴在 div 中添加了一个显示样式,如下所示:
<div id="SideBarArea" class="SideBarStyle" runat="server" style="display:block">
<div id="Top">
<asp:ContentPlaceHolder="TopPlaceHolder" runat="server"/>
</div>
<div id="Bottom">
<asp:ContentPlaceHolder="BottomPlaceHolder" runat="server"/>
</div>
</div>
这迫使 div 在 HTML 中呈现并且是非空的,所以这个问题在这一点上没有实际意义;但是,我仍然想了解为什么此更改有效,以及它是否是解决问题的“正确”方法。