使用委托从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;
知道吗?
我总是像这样在类外声明我的委托
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" />