ASP.NET中的条件呈现

时间:2010-05-06 07:50:57

标签: asp.net

拥有以下标记

    <li class="blabla">
        <asp:LinkButton ID="myBtn" runat="server" OnCommand="myBtn_Command" />
    </li>

是否有一种优雅的方式来有条件地呈现而不使li项成为服务器元素(runat="server")?覆盖Render()也不是一种选择。

P.S。 这是列表的页脚内容,但据我所知,无法在Repeater和ListView中控制FooterTemplate可见性。

3 个答案:

答案 0 :(得分:3)

您可以使用Panel(或div)容器的方法,以便相应地隐藏或显示容器。

<asp:Panel ID="panelContainer" runat="server" Visible='<%= ShowButton %>'>
 <li class="blabla">
        <asp:LinkButton ID="myBtn" runat="server" OnCommand="myBtn_Command" />
 </li>
</asp:Panel>

其中show button是服务器端代码上的受保护/公共布尔变量,根据您显示按钮的条件,它将取值true或false。

另一种方法是将ShowButton变量设为一个字符串,相应地取值'visible'或'hidden',并以这种方式设置li的可见性。即。

<li class="blabla" style='visibility: <%= ShowButton %';">
        <asp:LinkButton ID="myBtn" runat="server" OnCommand="myBtn_Command" />
 </li>

答案 1 :(得分:3)

要动态更改转发器的footerTemplate的可见性,您可以使用转发器的ItemDataBound事件:

    protected void rptTest_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Footer)
        {
            e.Item.Visible = false;
        }
    }

另一种选择可能是动态渲染一些javascript来隐藏/显示你的内容,但这不会阻止内容首先呈现。

第三,asp:placeholder控件不会呈现任何自己的html,因此您可以使用它来代替Nikos Steiakakis的答案中的asp:Panel

答案 2 :(得分:0)

您最好的选择是最简单的选择,就像您建议的那样,并通过添加runat =“server”使li成为服务器端控件。这就是runat =“server”的用途。

根据您的评论,您可以尝试使用占位符控件,并在服务器端代码中,可选择输出您的列表项和按钮。