1

我有一个问题,我试图在用户控件“input.ascx”和“output.ascx”之间发送一个字符串,当我有多个用户控件时。

这是父页面的 ASPX:

<uc:Input runat="server" id="Input1" />
<uc:Input runat="server" id="Input2" />

<uc:Output runat="server" id="Output1" />
<uc:Output runat="server" id="Output2" />

用户控制输入 ASCX:

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />

用户控制输入 VB.net:

Public Shared Event Button1Click(ByVal s As String)

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim s As String = TextBox1.Text
    RaiseEvent Button1Click(s)
End Sub

用户控制输出 ASCX:

<%@ Reference Control="~/Input.ascx" %>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

用户控制输出 VB.net:

Public Sub New()
    AddHandler UCTestUcInput.Button1Click, AddressOf DisplayText
End Sub

Private Sub DisplayText(ByVal s As String)
    Label1.Text = s
End Sub

问题是当我输入任何一个“input.ascx”时,它都会显示在两个“output.ascx”中,而它应该只显示在相应的输出中(如 input1 对应于 output1)。

4

1 回答 1

1

我发现这个问题的解决方案来自 2002 年关于 Code Project 的一篇旧文章。这是该文章的链接ASP.NET User Controls - Notify One Control Of Changes In Other Control。在阅读了那篇文章并查看了示例代码之后,我对上面的代码进行了以下更改。

除了应删除输出 ASPX 文件中的以下行外,ASPX 文件没有任何更改。

<%@ Reference Control="~/Input.ascx" %>

首先,添加一个名为 LabelChangeEventArgs 的新类。

Public Class LabelChangeEventArgs
    Inherits EventArgs

    Private _LabelStr As String

    Public Property LabelText() As String
        Get
            Return _LabelStr
        End Get
        Set(value As String)
            _LabelStr = value
        End Set
    End Property
End Class

用户控制输入 VB.net:添加一个 Delegate 并使用新的 LableChangeEventArgs 类来处理字符串。

Public Delegate Sub LabelChangeEventHandler(ByVal sender As Object, ByVal e As LabelChangeEventArgs)

Partial Class UCInput
    Inherits System.Web.UI.UserControl

    Public Event OnLabelChanged As LabelChangeEventHandler

    Protected Sub OnButtonClick(sender As Object, e As EventArgs)
        Dim args As New LabelChangeEventArgs
        args.LabelText = TextBox1.Text
        RaiseEvent OnLabelChanged(Me, args)
    End Sub

End Class

用户控制输出 VB.net:您制作一个 sub 来接收 args 并更改标签。

Public Sub LabelChange(sender As Object, args As LabelChangeEventArgs)
    If args IsNot Nothing Then
        Label1.Text = args.LabelText
    End If
End Sub

并在父页面代码文件中将控件连接在一起。

Protected Sub WireHandles() Handles Me.Init
    AddHandler UCInput1.OnLabelChanged, AddressOf UCOutput1.LabelChange
    AddHandler UCInput2.OnLabelChanged, AddressOf UCOutput2.LabelChange
End Sub

这是 src 文件的下载链接Link

于 2013-08-06T10:54:41.600 回答