2012-02-20 13 views
0

私はpublicイベントを持つusercontrolがあります。私は自分のWebページでこのユーザーコントロールを使用し、ページマークアップを介して私のコードのイベントハンドラにイベントを設定すると、私のusercontrolのイベントが設定されていないと、常に最初のページの負荷でもnullです。ここなぜ私は私のusercontrolのイベントのイベントハンドラを追加することはできませんが、ページマークアップ

[Serializable(), PersistChildren(false)] 
public partial class UserControl_UCDetailsView : System.Web.UI.UserControl 
{ 
    //here is an event for exposing detailsview1 event to the outside code 
    public event DetailsViewUpdateEventHandler OnItemUpdating; 
    protected void detailsview1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e) 
    { 
     //here i want it not to be null but it is. by using break points i found out 
     //this is always null and never actually get set while i've set it in markup! 
     if (this.OnItemUpdating != null) 
      this.OnItemUpdating(sender, e); 
    } 
} 

のUserControlの部分がマークアップされています:ここで私はのためのイベントを設定しようとしていることにたDetailsViewを持っている私のUserControlの部分がある

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="UCDetailsView.ascx.cs" 
    Inherits="UserControl_UCDetailsView" %> 
<asp:DetailsView ID="detailsview1" runat="server" OnItemUpdating="detailsview1_ItemUpdating"> 
</asp:DetailsView> 

とこれは私が私のページマークアップでイベントを設定しています方法です:ucDetails_ItemUpdaing IHで

<UC:DetailsView ID="ucDetails" runat="server" OnItemUpdating="ucDetails_ItemUpdating"> 
</UC:DetailsView> 

フィールドなどを設定するような実際の更新ロジックをお勧めします。 なぜ、私は次のようなページロード時にイベントを設定すれば問題は解決しますか?私は何かが欠けている?属性はおそらく?

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     ucDetails.OnItemUpdating += new DetailsViewUpdateEventHandler(ucDetails_ItemUpdating); 
    } 
} 

答えて

2

[パブリックプロパティとして追加および削除]プロパティを公開します。

注:I've just seen this answer on SO

public event DetailsViewUpdateEventHandler ItemUpdating; 

public event DetailsViewUpdateEventHandler OnItemUpdating 
{ 
    add { this.ItemUpdating += value;} 
    remove { this.ItemUpdating -= value;} 
} 
関連する問題