Asp.Net / Ajax自动更新更新面板怎么样?

时间:2011-02-04 04:35:01

标签: asp.net ajax timer updatepanel

我有一个Asp.net页面,要求某些部分以5秒的间隔自动部分更新。

为此目的,我计划使用旧的Timer控件和AJAX更新面板,但在对此控件进行了一些阅读后,我发现它可能存在一些问题,特别是如果,

1)更新面板执行的异步事件(4秒)与Timer的滴答间隔(5秒)之间的时间差非常小,更新面板将始终保持异步操作

2)此外,计时器控制在Firefox上无法正常工作。

我只是想知道我是否应该继续使用计时器和更新面板方法,编写一些自定义的javascript来完成部分页面更新或其他策略。

1 个答案:

答案 0 :(得分:3)

就个人而言,我倾向于认为DIY方法更好 - 更容易调试,更容易编写。

您可以使用javascript setInterval作为计时器,每次调用该函数时,您都可以向您的asp.net代码隐藏发起ajax请求,以获取需要更新的任何数据。

例如,假设您只需每5秒更新一次页面上的当前时间。假设您的页面上有一个ID 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更复杂,但是当我知道我的页面上实际运行的代码时,我发现它更容易。

如果您需要更新一系列控件而不是一个控件,您可以使用更复杂的Web方法返回xml或json数据,然后使用javascript解析它。