服务器端显示/隐藏HTML而不产生额外的标记

时间:2016-03-22 07:00:28

标签: html asp.net .net webforms

使用类似这样的内容来显示/隐藏某些标记:

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

它呈现为:

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

现在我希望能够显示/隐藏MyPanel服务器端,但不希望渲染周围的div

可以做类似的事情:

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

但这看起来很混乱。

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

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

但是这需要所有“root”控件都有runat=server属性,这会产生大量代码并且看起来也很混乱。

我的问题:

有没有办法告诉Panel控件本身不产生任何标记?或者是否有另一个控件用于我的目的?

2 个答案:

答案 0 :(得分:2)

我最终使用了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>

所以这正是我想要的:一个服务器控件,它允许我显示/隐藏多个HTML标记标记,而不会渲染任何额外的标记。

答案 1 :(得分:1)

如果您不希望为Panel生成div,那么您可以创建ul runat服务器并为此控件分配一些id并显示隐藏它后面的代码中的可见属性。

Host bitbucket
HostName bitbucket.org
ProxyCommand ssh user@ssh-host nc %h %p

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