拥有以下标记
<li class="blabla">
<asp:LinkButton ID="myBtn" runat="server" OnCommand="myBtn_Command" />
</li>
是否有一种优雅的方式来有条件地呈现而不使li
项成为服务器元素(runat="server"
)?覆盖Render()
也不是一种选择。
P.S。 这是列表的页脚内容,但据我所知,无法在Repeater和ListView中控制FooterTemplate可见性。
答案 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”的用途。
根据您的评论,您可以尝试使用占位符控件,并在服务器端代码中,可选择输出您的列表项和按钮。