Asp.net页面 - 用户控制通信

时间:2009-09-01 12:48:10

标签: asp.net user-controls delegates

我有一个Product.aspx页面,我有一个用户控件ProductDisplay.ascx,它是通过拖放创建的。

现在,当在ProductDisplay.ascx中单击一个按钮时,我想要一个在Product.aspx中调用的日志记录功能。

为实现这一点,我使用了代表

在ProductDisplay.ascx上

public delegate void LogUserActivity(ProductService objService);
public event LogUserActivity ActivityLog;

在Product.aspx上

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {            
        ProductDisp.ActivityLog += new User_UserControl_ProductDisplayBox.LogUserActivity(LogProduct);

    }
}

现在按下ProductDisplay.ascx的按钮事件

 protected void imgBtnBuyNow_Click(object sender, ImageClickEventArgs e)
 {        
    if (ActivityLog != null)
    {
        ActivityLog(Product);
    }
    Response.Redirect("~/User/ShoppingCart.aspx");
 }

我的问题是每当我点击此按钮 ActivityLog 为空。为什么它为空? 我的想法是,一旦我点击此按钮,页面回发并且其先前的状态将丢失。 请帮助我解决问题。

其次,我想取消空检查

**if (ActivityLog != null)**
    {
        ActivityLog(Product);
    }

我看到一些代码在声明它的时候用默认值实例化一个委托,但是我找不到它。请帮忙。

1 个答案:

答案 0 :(得分:0)

我找到了第一个问题的解决方案

if (!IsPostBack)
{            
    ProductDisp.ActivityLog += new User_UserControl_ProductDisplayBox.LogUserActivity(LogProduct);

}

这导致了问题。移动此行

ProductDisp.ActivityLog += new User_UserControl_ProductDisplayBox.LogUserActivity(LogProduct);

out of if(!IsPostBack)