C# 从ascx文件调用aspx.cs代码

C# 从ascx文件调用aspx.cs代码,c#,asp.net,onclick,imagebutton,ascx,C#,Asp.net,Onclick,Imagebutton,Ascx,我在ascx文件中有一个按钮,我想点击这个按钮调用abc.aspx.cs文件的一个方法。 有没有办法从ascx.cs文件中执行此操作? 这是我的钮扣 <asp:ImageButton ID="ImageButton1" Style="padding-top: 80px; margin-right:10px;" runat="server" ImageUrl="~/App_Themes/Default/Images/Login/NH/Do

我在ascx文件中有一个按钮,我想点击这个按钮调用abc.aspx.cs文件的一个方法。 有没有办法从ascx.cs文件中执行此操作? 这是我的钮扣

<asp:ImageButton ID="ImageButton1" Style="padding-top: 80px; margin-right:10px;" runat="server"                            ImageUrl="~/App_Themes/Default/Images/Login/NH/DownloadButton.jpg" />


asp.net中没有这样的工具,但您可以使用泛型处理程序(.ashx)来代替它

您可以在aspx页面中定义一个公共方法,并使用此.Page调用它

((YourASPXPage)(this.Page)).MyMethod();
在ASPX页面中

public void MyMethod()
{
     //Your code     
}

为了在不耦合页面和用户控件的情况下以干净的方式执行此操作,您可以在父aspx表单订阅的用户控件中创建一个事件

有关C#中事件的详细信息,请参见此

UserControl.ascx.cs WebForm.aspx
请注意,该活动没有或有许多订阅者。如果要将数据传输到事件处理程序,则需要创建自己的EventArgs实现,并使用这些实现的实例,而不是
EventArgs.Empty
。这还允许您检查订阅者是否处理了事件,您可以向EventArgs添加一个
handled
boolean属性,该属性由事件处理程序设置,然后在用户控件中进行评估。

另一种方法是将页面设置为事件处理程序,如下所示。
public class MyUserControl : UserContro
{
    public event EventHandler ImageButtonClicked;

    private void ImageButton1_Click(object sender, EventArgs e)
    {
        if (ImageButtonClicked != null)  // Check against null as there may not be any subscribers
            ImageButtonClicked(this, EventArgs.Empty);
    }

    // ...
}
<!-- ... -->
<uc:MyUserControl ID="myUserCtrl" runat="server" ImageButtonClicked="myUserCtrl_ImageButtonClicked" />
<!-- ... -->
// ...
private void myUserCtrl_ImageButtonClicked(object sender, EventArgs e)
{
    // Call method on page.
}
// ...