使用委托从ASPX更新ASCX

时间:2012-02-28 10:32:47

标签: c# asp.net

我正在尝试将ASCX.cs所需的所有数据库调用分开,只能从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){

}
}
}

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

我认为问题来自以下一行

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

任何想法?

2 个答案:

答案 0 :(得分:0)

我总是在课堂之外宣布我的代表

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

然后像你已经那样使用它

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

答案 1 :(得分:0)

现在有效。

我在我的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" />