我在 asp.net 中有一个 Web 用户控件 - 一个键盘。它有所有数字的按钮,一个用于显示输入的文本框以及清除和提交按钮。用户控件位于 AJAX 更新面板中,因此可以轻松显示/隐藏。(应用程序用于平板电脑浏览器)我需要在 AJAX 更新面板内的用户控件内向 subMitButton ClickEventHandler 添加一个委托。有什么建议么?甚至可能吗?我不想使用平板电脑的软数字键盘,因为它太大了。我可以将我的用户控件分开并在我的网站内使用它的代码,但我宁愿按预期使用用户控件。
问问题
13378 次
2 回答
10
您可以从用户控件中引发一个可以在页面中处理的事件。
你可以声明一个事件
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";
}
于 2014-02-25T23:03:06.047 回答
2
由于 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") );
}
}
}
上面的结构现在将回调一个向用户控件注册的主页。这是从主页向用户控件注册的方法
// 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
}
于 2015-07-28T19:13:55.720 回答