我有一个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);
}
我看到一些代码在声明它的时候用默认值实例化一个委托,但是我找不到它。请帮忙。
答案 0 :(得分:0)
我找到了第一个问题的解决方案
if (!IsPostBack)
{
ProductDisp.ActivityLog += new User_UserControl_ProductDisplayBox.LogUserActivity(LogProduct);
}
这导致了问题。移动此行
ProductDisp.ActivityLog += new User_UserControl_ProductDisplayBox.LogUserActivity(LogProduct);
out of if(!IsPostBack)