-4

我有一个 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 中呈现并且是非空的,所以这个问题在这一点上没有实际意义;但是,我仍然想了解为什么此更改有效,以及它是否是解决问题的“正确”方法。

4

1 回答 1

0

缺少字符通常会破坏 HTML,因此runat="server显然会变得很糟糕。

确保正确编写标记,并注意 IDE 提供的任何错误或警告。将您的代码视为一种编译语言,一种根本无法编译的语言,更不用说可以执行了,直到一切在语法上都是正确的。事实上,如果您使用的是 Visual Studio,那么您可以对其进行配置——我会随时提出建议——将警告视为错误,从而在这些情况下导致构建失败,从而迫使您查看问题所在.

同时,完成您的报价:

runat="server"

和:

id="Top"

和:

id="Bottom"
于 2013-02-25T16:00:55.977 回答