如何在asp.net c#中实现计时器?

时间:2016-06-13 19:24:24

标签: c# asp.net

我想在asp.net web中实现一个计时器,在一段时间之后,按钮的文本会被更改。我在gridview中动态创建了按钮并尝试了以下代码:

protected void Timer2_Tick(object sender, EventArgs e)
{
    Label2.Text = "Panel refreshed at: " +
    DateTime.Now.ToLongTimeString();

    for(int i = 0; i< rowcount; i++)
    {
        Button button = new Button();
        if (button.Text == "requested")
        {
            button.Text = "available";
        }
    }
}

但它不起作用。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

这需要在加载页面后在浏览器上执行的客户端代码(JavaScript)。 ASP.NET生成页面,将其发送到浏览器,然后服务器完成,直到它收到另一个请求。即使您在代码隐藏中创建了一个计时器,该代码隐藏也是一个超出范围的类,并在服务器处理完请求后消失。

在最简单的形式中,它看起来像这样:

<script>
    window.setTimeout(function()
    {
        //do something
    }, 10000); //interval in milliseconds - this is 10 seconds.
<script>

为了能够更改文字,您需要确保您的控件具有可以使用JavaScript找到的ID。通常用于服务器控件的任何ID,ASP.NET都会稍微修改它。我过度简化了这一点,但通常你可以这样做:

<asp:Label ID="myLabelId" ClientIDMode="Static" Text="The label text"></asp:Label>

<div runat="Server" ID="MyLabelId" ClientIDMode="Static">The label text</div>

ClientIdMode="Static"表示当控件呈现给页面时,它不会修改ID。

然后你的脚本可能如下所示:

<script>
    window.setTimeout(function()
    {
        var label = document.getElementById("MyLabelId");
        label.textContent = "The new value";
    }, 10000); 
<script>

或者您可以在脚本中尝试使用ClientIDMode="Static",而不是使用var label = document.getElementById("<%= MyLabelId.ClientID %>");

.ClientID

data = data.frame(x = runif(20, -10, 10), y = runif(20, -10,10)) p <- ggplot(data, aes(x = x, y =y)) slope = 0.5 yoff = 1 p <- p + stat_function(fun = function(x) slope*x+yoff) slope = 1 yoff = -1 p <- p + stat_function(fun = function(x) slope*x+yoff) p 是页面分配给控件的任何ID。这告诉它,无论它为该控件分配什么ID,都要将它直接写入您的脚本。