2013-07-31 45 views
1

我有一個問題,我試圖發送用戶控件之間的字符串「input.ascx」和「output.ascx」 ,當我有更多的每個用戶控制之一。RaiseEvent用戶控件之間有一個頁面上的相同控件的多個實例ASP.net

這裏是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)。

回答

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:您添加一個委託並使用新的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:你打個分,以接受參數和更改標籤。

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

相關問題