从web用户控件调用父aspx页面的函数

本文关键字:函数 aspx web 用户 控件 调用 | 更新日期: 2023-09-27 18:18:39

我有一个aspx页面,我在占位符中动态添加web用户控件。并且知道我在一个用户控件上有取消按钮,并且在单击该取消按钮时,我想加载aspx页面内的其他用户控件(占位符)。

我怎么能做到这一点,如果我在usercontrol中创建一个事件处理程序,然后它变成null。

谢谢

从web用户控件调用父aspx页面的函数

用户控件永远不应该对它所在的页面有任何依赖关系。向控件添加一个事件,并从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);
    }
}