[英]Add event delegate to event handler of ASP.NET user control
我在asp.net中有一个Web用户控件 - 一个键盘。 它具有所有数字的按钮,用于显示输入的文本框以及清除和提交按钮。 用户控件位于AJAX更新面板中,因此可以轻松显示/隐藏。 (应用程序用于平板电脑浏览器)我需要在AJAX更新面板内的用户控件中添加一个委托给subMitButton ClickEventHandler。 有什么建议么? 它甚至可能吗? 我不想使用平板电脑的软数字键盘,因为它是大的方式。 我可以分开我的用户控件并在我的网站中使用它的代码,但我宁愿按预期使用用户控件。
您可以从usercontrol引发一个可以在页面中处理的事件。
您可以声明一个事件
public event EventHandler SubmitButtonClick;
protected void OnSubmitButtonClick()
{
if (SubmitButtonClick!= null)
{
SubmitButtonClick(this, new EventArgs());
}
}
然后在页面上处理事件。
WebUserControl1.SubmitButtonClick+=
new WebUserControl.EventHandler(WebUserControl1_SubmitButtonClick);
private void WebUserControl1_SubmitButtonClick(object sender, EventArgs e)
{
Label1.Text = "Button Pressed";
}
由于ASP.NET网页生命周期,当我从主页面设置用户控件的公共属性时,我得到Nulls。 页面发送到客户端后,这些变量超出范围。 但是,这是一个简单的解决方案,可以让您在用户控件中发生事件时收到通知。
注意:返回主页面时,Page.Context存在一些问题,因此更改影响视图状态的内容可能不起作用。
在我的用户控制中,我做了以下...
// UC - setting up delegate and usercontrol property to store it
public delegate void CallbackAction(object sender, CustomEventArgs e);
public CallbackAction OnCallbackAction
{
get { return Session["CallbackAction"] as CallbackAction; }
set { Session["CallbackAction"] = value; }
}
在UserControl中的某个位置,您想要通知主页面的事件
// UC - callback from within the usercontrol
protected void UserControlButton_Click(object sender, EventArgs e)
{
if (IsPostback)
{
// do some processing
if (this.OnCallbackAction != null)
{
this.OnCallbackAction.Invoke(this, new CustomEventArgs("ET phone home") );
}
}
}
上面的结构现在将回调一个向usercontrol注册的主页面。 以下是如何从主页面注册usercontrol
// Main Page - load event
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostback)
{
// register with usercontrol
this.UserControlFoo.OnCallbackAction += CallbackFromUserControl_Click;
}
}
// Main Page - this event will get called back when ET phones home
protected void CallbackFromUserControl_Click(object sender, CustomEventArgs e)
{
// phoned home from usercontrol
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.