我有一个Asp.net页面,要求某些部分以5秒的间隔自动部分更新。
为此目的,我计划使用旧的Timer控件和AJAX更新面板,但在对此控件进行了一些阅读后,我发现它可能存在一些问题,特别是如果,
1)更新面板执行的异步事件(4秒)与Timer的滴答间隔(5秒)之间的时间差非常小,更新面板将始终保持异步操作
2)此外,计时器控制在Firefox上无法正常工作。
我只是想知道我是否应该继续使用计时器和更新面板方法,编写一些自定义的javascript来完成部分页面更新或其他策略。
答案 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解析它。