中继器内的2个占位符-隐藏/显示



我正试图隐藏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

最新更新