服务器端 show/hide of HTML 不产生额外的标记

Server-side show/hide of HTML without producing additional markup

使用类似的东西来 show/hide 某些标记:

<asp:Panel runat="server" ID="MyPanel">
    <li>...</li>
    <li>...</li>
    ...
</asp:Panel>

它被渲染成这样:

<div>
    <li>...</li>
    <li>...</li>
    ...
</div>

现在我想要 show/hide 服务器端 MyPanel 但不想渲染周围的 div

可以做类似的事情:

<% if (MyCondition) { %>
    <li>...</li>
    <li>...</li>
    ...
<% } %>

但这对我来说看起来相当混乱。

或者我可以做类似的事情:

<li runat="server" ID="C1">...</li>
<li runat="server" ID="C2">...</li>
...

但这需要所有 "root" 控件都具有 runat=server 属性,该属性会产生大量代码并且在我看来也很混乱。

我的问题:

有没有办法告诉 Panel 控件自己不生成任何标记?或者是否有其他控件可用于我的目的?

如果您不希望针对 Panel 生成 div,那么您可以使 ul runat 服务器并为该控件分配一些 id,并在后面的代码中使用 visible 属性显示隐藏它。

<li id="myUl" runat="server">

</li>

面板允许有滚动条,实际上是通过div实现的,直接使用ul不会有。

我最终使用了 Literal control

有了这个控件,我可以这样写:

<ul>
    <li>1</li>
    <li>2</li>
    <asp:Literal runat="server" Visible="false">
        <li>3</li>
        <li>4</li>
    </asp:Literal>
    <li>5</li>
</ul>

结果是:

<ul>
    <li>1</li>
    <li>2</li>
    <li>5</li>
</ul>

我也可以这样写:

<ul>
    <li>1</li>
    <li>2</li>
    <asp:Literal runat="server" Visible="true">
        <li>3</li>
        <li>4</li>
    </asp:Literal>
    <li>5</li>
</ul>

结果如下:

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>

所以这正是我想要的:一个服务器控件,允许我 show/hide 多个 HTML 标记标签而不呈现任何额外的标记。