Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 将链接按钮单击从一个用户控件传递到另一个用户控件_Asp.net_Vb.net_User Controls - Fatal编程技术网

Asp.net 将链接按钮单击从一个用户控件传递到另一个用户控件

Asp.net 将链接按钮单击从一个用户控件传递到另一个用户控件,asp.net,vb.net,user-controls,Asp.net,Vb.net,User Controls,我在同一页上有两个用户控件。一个包含显示导航链接的ListView,第二个用户控件应在用户单击ListView中的buttonlink时更新。我该怎么做 UserControl A应该处理按钮单击并在UserControl中声明 页面处理此事件并调用UserControl B的公共方法来更新其内容 您可以通过EventArgs将必需的信息从UserControl A传递到页面(或者将UserControl本身作为参数传递并使用其公共属性) 然后,页面通过方法参数或在调用Update-方法之前更改

我在同一页上有两个用户控件。一个包含显示导航链接的ListView,第二个用户控件应在用户单击ListView中的buttonlink时更新。我该怎么做

  • UserControl A应该处理按钮单击并在UserControl中声明
  • 页面处理此事件并调用UserControl B的公共方法来更新其内容
  • 您可以通过EventArgs将必需的信息从UserControl A传递到页面(或者将UserControl本身作为参数传递并使用其公共属性)

    然后,页面通过方法参数或在调用
    Update
    -方法之前更改其公共属性,将参数传递给UserControl B


    这是您要求的示例代码。 很抱歉,没有意义的命名,但你还没有告诉我这是怎么回事。您应该使用可读的变量、属性、方法和事件名称

    使用ListView减少用户控件A的

    <%@ 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>
    
    简单用户控件B,仅带有一个标签(ascx):

    最后,这里是页面(aspx)

    此事件方法的优点是UserControls保持可重用性。您也可以在其他页面中使用UserControl A,即使它们不处理此事件。控制器的一部分是决定需要什么和应该做什么

    UserControls通常不应该依赖于特定的控制器,否则它们是硬链接的,不可重用。这也将是令人讨厌的错误的一个好来源。UserControl可能是其他嵌套(用户)控件的控制器,但不是页面本身的控制器

    沟通总结

    • 页面->用户控件->公共属性和方法
    • 用户控制->页面->事件
    • 用户控制->用户控制->控制器用户控制采用页面角色(见上文)

    是否可以提供一些示例代码?我真的很难做到这一点。谢谢。非常感谢你@tim。非常感谢。@Aaron:不客气。刚刚添加了对这种方法的解释。
    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
    
    <%@ 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" />
    
    Private Sub LinkClicked(sender As UserControlA, id As Integer) Handles UC_A.LinkClicked
        Me.UC_B.Update(id)
    End Sub