从web用户控件调用父aspx页面的函数
本文关键字:函数 aspx web 用户 控件 调用 | 更新日期: 2023-09-27 18:18:39
我有一个aspx页面,我在占位符中动态添加web用户控件。并且知道我在一个用户控件上有取消按钮,并且在单击该取消按钮时,我想加载aspx页面内的其他用户控件(占位符)。
我怎么能做到这一点,如果我在usercontrol中创建一个事件处理程序,然后它变成null。
谢谢
用户控件永远不应该对它所在的页面有任何依赖关系。向控件添加一个事件,并从Cancel按钮事件处理程序中触发该事件。
public event EventHandler CancelClicked;
protected Cancel_Click(object sender, EventArgs e)
{
if(CancelClicked != null)
{
CancelClicked(this, e);
}
}
从您的页面,订阅控件的CancelClicked事件,并执行应该在其他用户控件上执行的任何操作。
我认为实现这一点的最好方法是在用户控件中创建一个事件,当您需要它进行通信时触发该事件,然后在页面中您可以订阅此事件。
您的用户控制
把它作为事件变量放到控件中。
public event EventHandler CancelRequested;
然后在取消按钮中单击事件:
CancelRequested(this, new CommandEventArgs("CancelClicked", SomeVariable));
您的页面(或父页)
然后像这样订阅父页面中的事件(当您动态添加它时):
ctrlYourControl.CancelRequested += new EventHandler(ctrlYourControl_CancelRequested);
声明事件处理器:
void ctrlYourControl_CancelRequested(object sender, EventArgs e)
{
// display other user control
}
将此事件添加到您的用户控件:
public event EventHandler CancelClicked;
现在,这个方法在你的父aspx页面上。
public void OnCancelClicked (object sender, EventArgs data)
{
// do your stuffs like loading other controls and
// whatever when event fired
}
当你动态加载你的用户控件时,添加这个:
var someControl = LoadControl(@"~'SomeControl.ascx") as SomeControl;
someControl.CancelClicked += new EventHandler(OnCancelClicked);
在你的用户控件上:
public void btnCancel_Click(object sender, EventArgs e)
{
if(CancelClicked != null)
{
CancelClicked(this, e);
}
}