私は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);
}
}