我正试图隐藏PlaceHolder2并在单击链接按钮时显示PlaceHolder1。两者都是内部中继器。
Aspx
<form id="form1" runat="server">
<asp:Repeater ID="rptOnly" runat="server">
<ItemTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="False">
//Display some images
</asp:PlaceHolder>
<asp:PlaceHolder ID="PlaceHolder2" runat="server">
<asp:linkbutton runat="server" id="lnkbtn" text="Click Here" OnClick="Myfunction_Click" />
</asp:PlaceHolder>
</ItemTemplate>
</asp:Repeater>
</form>
VB.net
Protected Sub Myfunction_Click(sender As Object, e As EventArgs)
PlaceHolder1.Visible = True
PlaceHolder2.Visible = False
End Sub
使用RepeaterItem中的FindControl(因为Repeater中可能有多个项目),然后设置可见性。
中继器中第一个项目的EX=
CType(rptOnly.Items(0).FindControl("PlaceHolder1"), PlaceHolder).Visible = True
CType(rptOnly.Items(0).FindControl("PlaceHolder2"), PlaceHolder).Visible = False
对于中继器中的所有项目,在rptOnly.items中作为RepeaterItem执行For Each RPI,然后执行相同的操作。
从评论编辑:
您的特定问题需要设置按钮的CommandName属性,该属性也在ItemTemplate中,并更改中继器的ItemCommand事件中占位符的可见性。
CType(e.Item.FindControl("PlaceHolder1"), PlaceHolder).Visible = True
中继器有一个项目集合-您需要检查集合中的每个项目:
For Each c As Control in rptOnly.Items
Dim p1 As Control = c.FindControl("PlaceHolder1")
Dim p2 As Control = c.FindControl("PlaceHolder2")
If p1 IsNot Nothing Then
p1.Visible = True
End If
If p2 IsNot Nothing Then
p2.Visible = False
End If
Next
每个项目都是一个RepeaterItem:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeateritem_methods(v=vs.110).aspx
在Myfunction_Click
中,您应该能够找到占位符作为控件的父对象——类似于以下内容(您可能需要强制转换parent对象):
Protected Sub Myfunction_Click(sender As Object, e As EventArgs)
sender.Parent.Visible = True
sender.Parent.Visible = False
End Sub