Asp.Net / Ajax обновление панели обновления автоматически, как? - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть страница Asp.net, которая требует частичного обновления некоторых разделов автоматически с интервалом в 5 секунд.

Я планировал использовать для этой цели старый добрый элемент управления Timer с панелью обновления AJAX, но после небольшого чтения этого элемента управления я обнаружил, что у него могут быть некоторые проблемы, особенно если,

1) Разница во времени между асинхронным событием, выполняемым (4 секунды) панелью обновлений, и интервалом между таймерами таймера (который составляет 5 секунд) довольно мала, панель обновления будет постоянно удерживаться в асинхронной операции .

2) Кроме того, тот факт, что управление таймером не очень хорошо работает с Firefox.

Я просто хотел узнать ваше мнение относительно того, стоит ли мне использовать подход с таймером и панелью обновлений, написать какой-нибудь пользовательский javascript, который выполняет частичное обновление страницы, или какую-то другую стратегию в целом.

1 Ответ

3 голосов
/ 04 февраля 2011

Лично я склонен думать, что подход «сделай сам» лучше - легче отлаживать и легче писать.

Вы можете использовать javascript setInterval для таймера и каждый раз, когда вызывается функцияВы можете инициировать ajax-запрос к своему программному обеспечению asp.net, чтобы получить любые данные, которые необходимо обновить.

Например, скажем, вам просто необходимо каждые 5 секунд обновлять текущее время встр.Предположим, у вас есть диапазон идентификатора currentTime на вашей странице, что-то вроде:

<asp:Label id="CurrentTime" runat="server" CSSClass="currentTimeLabel" />

В вашем начальном событии PageLoad вы устанавливаете время:

protected void PageLoad(...)
{
    CurrentTime.Text = DateTime.Now.ToString();
}

Теперь вам нужно определить некоторый javascript на вашей странице, который будет каждые 5 секунд вызывать код и получать новое значение даты / времени.

Сделать это с чем-то вроде jQuery очень просто:

$(document).ready(function() {
    setInterval(5000, updateTime);
});

function updateTime() {
    url: "myPage.aspx/SomePageMethod",
    success: function(data) {
        $(".currentTimeLabel").text(data);
    });
}

В ASP.NET заставить работать PageMethod - самая сложная часть (во всяком случае, для меня).Вам нужно создать публичную функцию в вашем коде с атрибутом «WebMethod».Примерно так:

[WebMethod]
public static string GetCurrentTime()
{
    return DateTime.Now.ToSTring();
}

Я не тестировал ни один из этих кодов, но основная предпосылка - это звук и он должен работать нормально.

Теперь это может показаться более сложным, чем использованиеUpdatePanel, но мне легче, когда я знаю, какой код на самом деле выполняется на моей странице.

Если вам нужно обновить серию элементов управления вместо одного элемента управления, вы можете использовать более сложный веб-метод, который возвращаетДанные XML или JSON, а затем проанализируйте их с помощью JavaScript.

...