我在asp.net中有一个Web用户控件 - 一个键盘。它具有所有数字的按钮,用于显示输入的文本框以及清除和提交按钮。用户控件位于AJAX更新面板中,因此可以轻松显示/隐藏。 (应用程序用于平板电脑浏览器)我需要在AJAX更新面板内的用户控件中添加一个委托给subMitButton ClickEventHandler。有什么建议?它甚至可能吗?我不想使用平板电脑的软数字键盘,因为它是大的方式。我可以分开我的用户控件并在我的网站中使用它的代码,但我宁愿按预期使用用户控件。
答案 0 :(得分:9)
您可以从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";
}
答案 1 :(得分:1)
由于ASP.NET网页生命周期,当我从主页面设置用户控件的公共属性时,我得到Null。页面发送到客户端后,这些变量超出范围。但是,这是一个简单的解决方案,可以让您在用户控件中发生事件时收到通知。
注意:返回主页时,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
}