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

Mac*_*ver 1 .net c# paging events delegates

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

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

我想我必须把我的代表放在某个地方.??

    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
    }
Run Code Online (Sandbox Code Playgroud)

jda*_*ies 8

使用事件可以正常工作.

您可以在UserControl中创建事件,如下所示:

public event EventHandler ButtonClicked;
Run Code Online (Sandbox Code Playgroud)

然后在需要时调用事件:

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

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

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

void UserControl1_ButtonClicked(object sender, EventArgs e)
{

}
Run Code Online (Sandbox Code Playgroud)

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

MyPage page = (MyPage)Page;
page.AMethod();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.