使用委托从ASPX更新ASCX

本文关键字:ASPX 更新 ASCX | 更新日期: 2023-09-27 18:25:58

我正在尝试将ASCX.cs所需的所有DB调用分离为仅从ASPX.cs调用,我正在尝试使用委托和事件。

我的ASCX.cs有

namespace x.xx.xy.xyy.xyyy
{
public partial class PaymentItem : UserControlBase
{      
    public delegate void Handler(Dictionary<string, string> keyvalues);
    public event Handler aPICall;     
}
}

我的ASPX.cs有

namespace x.xx.xz.xzz.xzzz
{
public partial class PaymentItemPopUp
{
    protected global::x.xx.xy.xyy.xyyy.PaymentItem ucPaymentItem;
    protected void Page_Load(object sender, EventArgs e)
    {
        this.ucPaymentItem.aPICall += new PaymentItem.Handler(ServiceAPICAll);
    }
protected void ServiceAPICAll(Dictionary<string, string> keyvalues){
}
}
}

当编译器命中以下行时,我得到"对象引用未设置为对象的实例"this.ucPaymentItem.aPICall+=新的PaymentItem.Handler(ServiceAPICAll);

我想问题来自以下行

受保护的全局::x.xx.xy.xyy.xyyy.PaymentItem ucPaymentItem;

知道吗?

使用委托从ASPX更新ASCX

我总是像这样在类外声明我的委托

public delegate void PaymentItemHandler(...)
public partial class PaymentItem : UserControlBase 
{
  public PaymentItemHandler OnHandler { get; set;}
}

然后像你已经做一样使用它

this.ucPaymentItem.OnHandler += new PaymentItemHandler(ServiceAPICall)

现在可以工作了。

我删除了设计师为我的aspx页面中的用户控件生成的代码

我的ASPX.designer.cs

//protected global::System.Web.UI.UserControl PaymentItem1;

然后我像下面的一样改变了

我的ASPx.cs

protected global::x.xx.xy.xyy.xyyy.PaymentItem  PaymentItem1; 

我的ASPX

<%@ Register Src="~/_xy/xyy/xyyy/PaymentItem.ascx" TagName="PaymentItem" TagPrefix="uc1"  %>
 <uc1:PaymentItem runat="server" ID="PaymentItem1" />