2016-12-02 130 views
0

我有一個用戶控件,當文件上傳到它的內部FileUpload控件時引發一個事件。當用戶控件只有一個實例將事件註冊到頁面時,它可以正常工作。當我添加第二個實例時,第一個事件不再起作用。如果我從第一個或第二個實例觸發事件,它們最終都會運行UserControl2_FileSelected方法。我想爲頁面上的每個用戶控件運行一個單獨的方法。如何提升用戶控件的單獨事件實例?

頁:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MyUserControls.Default" %> 

<%@ Register Src="~/Classes/Controls/FileUploader.ascx" TagPrefix="uc1" TagName="FileUploader" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    <uc1:FileUploader runat="server" id="FileUploader1" Text="Uploader 1" /> 
    <uc1:FileUploader runat="server" ID="FileUploader2" Text="Uploader 2" /> 
</asp:Content> 

代碼隱藏頁:

public partial class Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      FileUploader1.FileSelected += new EventHandler(UserControl1_FileSelected); 
      FileUploader2.FileSelected += new EventHandler(UserControl2_FileSelected); 
     } 

     protected void UserControl1_FileSelected(object sender, EventArgs e) 
     { 
      //handle event from instance 1 
      System.Diagnostics.Debug.WriteLine("Control 1"); 
     } 

     protected void UserControl2_FileSelected(object sender, EventArgs e) 
     { 
      //handle event from instance 2 
      System.Diagnostics.Debug.WriteLine("Control 2"); 
} 
} 

用戶控件的代碼背後:

public partial class FileUploader : System.Web.UI.UserControl 
    { 
     public event EventHandler FileSelected; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (IsPostBack) 
      { 
       if (this.FileUpload1.HasFile) 
       { 
        this.FileSelected(this, e); 
       } 
      } 
     } 
    } 

回答

0

您需要使用Delegate,不EventHandler

在用戶控制

private Delegate _FileSelected; 
public Delegate FileSelected 
{ 
    set { _FileSelected = value; } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     if (FileUpload1.HasFile) 
     { 
      //invoke the command in the parent 
      _FileSelected.DynamicInvoke(FileUpload1.FileName); 
     } 
    } 

,然後將含有該控制

delegate void FileSelected(string value); 

protected void Page_Load(object sender, EventArgs e) 
{ 
    //add the delegates to the usercontrol 
    FileSelected fileSelected1 = new FileSelected(UserControl1_FileSelected); 
    FileUploader1.FileSelected = fileSelected1; 

    FileSelected fileSelected2 = new FileSelected(UserControl2_FileSelected); 
    FileUploader2.FileSelected = fileSelected2; 
} 

private void UserControl1_FileSelected(string value) 
{ 
    Label1.Text += "1: " + value + "<br>"; 
} 

private void UserControl2_FileSelected(string value) 
{ 
    Label1.Text += "2: " + value + "<br>"; 
} 
在頁面上
相關問題