我在同一个页面上有两个用户控件。其中一个包含一个ListView,用于显示导航链接,第二个用户控件应在用户单击ListView中的buttonlink时更新。我该如何做到这一点?
我在同一个页面上有两个用户控件。其中一个包含一个ListView,用于显示导航链接,第二个用户控件应在用户单击ListView中的buttonlink时更新。我该如何做到这一点?
您可以通过EventArgs传递必要的信息从用户控件A到页面(或将用户控件本身作为参数传递并使用其公共属性)。
然后页面通过方法参数或更改其公共属性将参数传递给用户控件B,然后调用Update
-方法。
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="UsercontrolA.ascx.vb" Inherits="WebApplication1.UserControlA" %>
<asp:ListView ID="ListView1" runat="server">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1"
CommandName="LinkClick"
CommandArgument='<%#Eval("ID") %>'
runat="server"
Text='<%#Eval("Text") %>'></asp:LinkButton>
</ItemTemplate>
</asp:ListView>
Public Event LinkClicked(sender As UserControlA, id As Int32)
Private Sub LV_ItemCommand(sender As Object, e As ListViewCommandEventArgs) Handles ListView1.ItemCommand
If e.CommandName = "LinkClick" Then
Dim id = CType(e.CommandArgument, Int32)
' This is the best way for UC's to commmunicate with the page: '
RaiseEvent LinkClicked(Me, id)
End If
End Sub
这是一个简单的UserControl B,只包含一个Label(ascx):
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="UserControlB.ascx.vb" Inherits="WebApplication1.UserControlB" %>
<asp:Label ID="Label1" runat="server"></asp:Label>
Public Sub Update(showID As Int32)
Me.Label1.Text = String.Format("Link {0} clicked", showID.ToString)
End Sub
<uc1:UsercontrolA ID="UC_A" runat="server" />
<br />
<uc2:UserControlB ID="UC_B" runat="server" />
Update
方法:Private Sub LinkClicked(sender As UserControlA, id As Integer) Handles UC_A.LinkClicked
Me.UC_B.Update(id)
End Sub