调用 ASP.NET 用户控件事件时调用页面事件

问题描述 投票:0回答:1

假设页面中有一个名为 Paging.ascx 的用户控件,该控件嵌入在 PageWithResults.aspx 中。 该控件具有必要的属性来跟踪有关您所在页面的各种详细信息(即:CurrentPage、TotalRecordsInResults、RecordsPerPage 等)。 它还包含单击超链接(“下一页”或“上一页”)时触发的事件。 下面的例子。 我需要告诉 PageWithResults.aspx 这些 LinkButton Web 控件之一已被单击。 我想我需要在页面中分配一个委托,以便当调用此用户控件事件(单击超链接)时,它还会调用页面类中的一些其他方法/事件。 这样我就可以快速检查 CurrentPage 的新值是什么(基于下面的事件中调用的内容)并获取新页面的新结果集(基于 CurrentPage 属性)。 但我不确定最好的方法。 我认为这需要一个代表,但我不知道如何连接它。 如果您需要更多详情,请询问。

    protected void btnNext_Click(object sender, EventArgs e)
    {
        this.CurrentPage = this.CurrentPage + 1;
        if (OnPageChanged != null) OnPageChanged(this.CurrentPage);
    }

我想我必须把我的代表放在这里某个地方。 ??

    protected void btnNext_Click(object sender, EventArgs e)
    {
        this.CurrentPage = this.CurrentPage + 1;
        if (OnPageChanged != null) OnPageChanged(this.CurrentPage);
                    //delegate to call object.method or something
    }
c# .net events pagination delegates
1个回答
8
投票

使用事件就可以了。

您可以像这样在 UserControl 中创建事件:

public event EventHandler ButtonClicked;

然后在需要时调用事件:

protected void Button1_Click(object sender, EventArgs e)
{
    if (ButtonClicked != null)
        ButtonClicked(this, new EventArgs());
}

在您的页面中,您需要分配一个事件处理程序:

protected void Page_Load(object sender, EventArgs e)
{
    UserControl1.ButtonClicked += new EventHandler(UserControl1_ButtonClicked);
}

void UserControl1_ButtonClicked(object sender, EventArgs e)
{

}

除了使用上述方法之外,您还可以在 UserControl 中强制转换 Page 引用并直接调用公共方法:

MyPage page = (MyPage)Page;
page.AMethod();

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.