代码之家  ›  专栏  ›  技术社区  ›  Asad

计时器行为异常!

  •  1
  • Asad  · 技术社区  · 15 年前

    我在.aspx页面上遇到了一个奇怪的行为。

    我叫了数据表 MyDataList Date 字段小于 SomeDate .

    我使用UpdatePanel、ScriptManager和计时器(都是AJAX)刷新MyDataList。

    protected void Timer1_Tick(object sender, EventArgs e)
    {                
        MyDataList.DataBind();
    }
    
    protected void MyDataList_ItemCreated(object sender, DataListItemEventArgs e)
    {
    }
    

    问题是:

    空的 的事件处理程序 ItemCreated 事件(例如, MyDataList_ItemCreated ),工作正常(如上所示)。

    如果我提供代码来突出显示 事件处理程序(如下所示),计时器停止计时,事件 Timer1_Tick 不会再开火了。

    protected void DataListBgArticles_ItemCreated(object sender, 
        DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || 
            e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Product product = (Product)e.Item.DataItem;
            if (product.SaleDate > DateTime.Now.AddDays(-2))
            {
                e.Item.BackColor = Color.Pink;
            }
        }
    }
    

    如何修复此问题以使计时器继续更新?

    1 回复  |  直到 15 年前
        1
  •  0
  •   casperOne    15 年前

    您正在ASP.NET页的计时器回调中执行数据绑定操作。

    没有多少(好吧, 任何

    计时器回调基本上意味着您将操作置于页面处理管道之外,因此,代码隐式或显式依赖的任何对象都完全可能不再可用。

    因为您正在执行数据绑定,所以完全有可能您的计时器事件正在触发并尝试更新已经推送到用户的网格。