Таймер ведет себя странно! - PullRequest
1 голос
/ 16 февраля 2010

Я сталкиваюсь со странным поведением для страницы .aspx.

У меня есть DataList с именем MyDataList. Мне нужно условно выделить строки DataList, в зависимости от произвольного значения в данных, например, если поле Date меньше SomeDate.

Я использую UpdatePanel, ScriptManager и таймер (все AJAX) для обновления MyDataList.

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

protected void MyDataList_ItemCreated(object sender, DataListItemEventArgs e)
{
}

Проблема:

Если я добавлю обработчик события empty для события ItemCreated (EG, MyDataList_ItemCreated), он будет работать нормально (как показано выше).

Если я предоставляю код для выделения значения в обработчике события 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 Ответ

0 голосов
/ 16 февраля 2010

Простите за вопрос, но я думаю, что вы должны точно указать , почему вы выполняете операцию привязки данных при обратном вызове таймера на странице ASP.NET.

Не так много (хорошо, любых ) ситуаций, о которых я могу подумать, для которых потребовалась бы такая вещь.

Обратный вызов таймера в основном означает, что вы помещаете действие вне конвейера обработки страницы, и поэтому вполне возможно, что любые объекты, от которых код явно или неявно зависит, больше не будут доступны.

Поскольку вы выполняете привязку данных, вполне возможно, что ваше событие таймера запускается и пытается обновить сетку, которая уже была передана пользователю.

Похоже, что вы используете таймер для запуска события для обновления сетки данных. Проблема в том, что вы обновляете структуру на стороне сервера, но это не равнозначно обновлению на клиенте. Клиент должен обновить себя, чтобы получить эти данные (у сервера нет способа фактически подключиться к клиенту и выполнить обновление).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...