我想在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";
}
}
}
但它不起作用。我该如何解决这个问题?
答案 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,都要将它直接写入您的脚本。