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

时间:2011-12-22 09:27:30

标签: c# asp.net

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

我怎么能这样做,如果我在usercontrol中创建一个事件处理程序然后变为空。

感谢

3 个答案:

答案 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);
    }
}

这应该做!