Asp.Net/Ajax自动更新面板如何更新?

Asp.Net/Ajax自动更新面板如何更新?,asp.net,ajax,timer,updatepanel,Asp.net,Ajax,Timer,Updatepanel,我有一个Asp.net页面,它要求某些部分以5秒的间隔自动更新 我本来打算在AJAX更新面板中使用好的老定时器控件来实现这个目的,但是在阅读了这个控件之后,我发现它可能会有一些问题,特别是 1) 更新面板执行的异步事件(4秒)与计时器的计时间隔(5秒)之间的时间差非常小,更新面板将一直处于异步操作状态 2) 此外,计时器控件在Firefox上也不能很好地工作 我只是想听听你的意见,看看我是否应该继续使用计时器和更新面板的方法,编写一些定制javascript来进行部分页面更新,或者完全采用其他策

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

我本来打算在AJAX更新面板中使用好的老定时器控件来实现这个目的,但是在阅读了这个控件之后,我发现它可能会有一些问题,特别是

1) 更新面板执行的异步事件(4秒)与计时器的计时间隔(5秒)之间的时间差非常小,更新面板将一直处于异步操作状态

2) 此外,计时器控件在Firefox上也不能很好地工作


我只是想听听你的意见,看看我是否应该继续使用计时器和更新面板的方法,编写一些定制javascript来进行部分页面更新,或者完全采用其他策略

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

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

例如,假设您只需要每隔5秒更新页面上的当前时间。假设您的页面上有一个ID currentTime的跨度,类似于:

<asp:Label id="CurrentTime" runat="server" CSSClass="currentTimeLabel" />
现在,您需要在页面上定义一些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解析这些数据。

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

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

例如,假设您只需要每隔5秒更新页面上的当前时间。假设您的页面上有一个ID currentTime的跨度,类似于:

<asp:Label id="CurrentTime" runat="server" CSSClass="currentTimeLabel" />
现在,您需要在页面上定义一些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解析这些数据。

感谢您的d响应。我有点同意,通过使用这种方法,你可以看到你的页面上运行着什么。然而,我计划在updatepanel中包含一个DataGrid以及一些其他控件。因此,要将一个集合作为数据源绑定到该网格,我必须做一些类似的事情,这意味着我必须自己在javascript函数中编写大量绑定代码。单元测试将是另一件我必须权衡的事情。有没有更好的方法来解决这个问题谢谢你的回复。我有点同意,通过使用这种方法,你可以看到你的页面上运行着什么。然而,我计划在updatepanel中包含一个DataGrid以及一些其他控件。因此,要将一个集合作为数据源绑定到该网格,我必须做一些类似的事情,这意味着我必须自己在javascript函数中编写大量绑定代码。单元测试将是另一件我必须权衡的事情。有没有更好的办法