我在WCF服务项目中有一个aspx Web表单,它提供有关该服务的状态报告。目前我有一个刷新按钮,但我想自动定期刷新。
我尝试了两种方法:
<head>
在setInterval()
内的javascript,并使用Page_Load
在RegisterStartupScript
中启动。 Systems.Timers.Timer
内的Page_Load
,执行按钮点击操作。 我没有得到(1)正确的,因为明显的范围问题,我显然误解了它应该如何工作。目前,该脚本只是发出警报,我无法进一步。
我没有得到(2)正确,虽然它似乎应该可以工作,因为在计时器函数中放置一个断点会显示正确的值,但页面上的表单标签不会更新。
webform.aspx如下所示:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Manage.aspx.cs" Inherits="MyServiceWS.ManageForm" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Manage</title>
<script type="text/javascript">
// method (1)
RefreshScript = function ()
{
setInterval(function () { alert("How to call the Refresh code?"); }, 5000);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<p>
Synchronisation status:
<asp:Label ID="SyncStatusLabel" runat="server" />
<p>
<asp:Button ID="RefreshButton" runat="server" Text="Refresh"
onclick="RefreshButton_Click" />
<p>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
webform.aspx.cs中的c#代码如下所示。这是所需刷新代码所在的位置。当然,我一次只尝试一种方法,为了清楚起见,我们在下面都没有注释它们。
namespace MyServiceWS
{
public partial class ManageForm : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// method (1)
ClientScript.RegisterStartupScript(this.GetType(), "addScript", "RefreshScript()", true);
if (Page.IsPostBack)
Refresh();
else
{ // method (2)
var myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(TimedRefreshEvent);
myTimer.Interval = 5000;
myTimer.Start();
}
}
protected void RefreshButton_Click(object sender, EventArgs e)
{
Refresh();
}
private void TimedRefreshEvent(object source, ElapsedEventArgs e)
{
Refresh();
}
private void Refresh()
{
SyncStatusLabel.Text = Global.StatusDescription;
}
}
}
Global.asax
文件包含静态字符串变量StatusDescription
,该变量正确包含服务在其他位置填充的状态。
我很难过,方法是否正确,我该如何处理?
答案 0 :(得分:0)
改变这个:
RefreshScript = function ()
{
setInterval(function () { alert("How to call the Refresh code?"); }, 5000);
}
要:
function RefreshScript()
{
setInterval(function () { alert("How to call the Refresh code?"); }, 5000);
}
看看它是否更好。
您也可以使用计时器方法,但不能通过System.Timers.Timer;使用ASP.NET AJAX timer control。
答案 1 :(得分:0)
我设法通过将工具箱中的AJAX计时器添加到UpdatePanel
并使用OnTick
属性来调用RefreshButton_Click
按照说明here.