我有一个aspx页面,我在占位符中动态添加Web用户控件。并知道我在一个用户控件上有取消按钮,单击该取消按钮我想在aspx页面(占位符)中加载其他用户控件。
我怎么能这样做,如果我在usercontrol中创建一个事件处理程序然后变为空。
感谢
答案 0 :(得分:6)
用户控件永远不应该对它所在的页面有任何依赖性。向控件添加一个事件,并从Cancel按钮事件处理程序中激活它。
public event EventHandler CancelClicked;
protected Cancel_Click(object sender, EventArgs e)
{
if(CancelClicked != null)
{
CancelClicked(this, e);
}
}
在您的页面中,订阅控件的CancelClicked事件,并对该其他用户控件执行任何操作。
答案 1 :(得分:2)
我认为实现此目的的最佳方法是在用户控件中创建一个事件,当您需要它进行通信时触发,然后在页面中您可以订阅此事件。
您的用户控制
将此作为事件变量放在您的控件中。
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
}
答案 2 :(得分:2)
将此事件添加到您的用户控件:
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);
}
}
这应该做!