2016-06-13 4 views
-2

asp.net webにタイマーを実装したいのですが、時間の経過後にボタンのテキストが変更されます。私は、GridViewの中で動的にボタンを作成し、このコードを試してみました:asp.net C#でタイマーを実装する方法?

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"; 
     } 
    } 
} 

をしかし、それは動作しません。どうすればこの問題を解決できますか?

+4

GridViewで作成したボタンのテキストを変更するには、そのButtonオブジェクトへの参照が必要です。Buttonボタン= new Button()は、単に以前に作成したButtonとは関係のない新しいButtonオブジェクトを作成します。 .. – Kevin

答えて

2

これには、ページのロード後にブラウザで実行されるクライアントコード(JavaScript)が必要です。 ASP.NETはページを生成してブラウザに送信し、別の要求を取得するまでページを処理します。コードビハインドにタイマーを作成しても、そのコードビハインドはスコープを超えてクラスが生成され、サーバーが要求の処理を完了すると消滅します。最も単純な形式で

、それはこのようなものになります。テキストを変更することができるようにするために

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

を、あなたのコントロールは、あなたが使用して見つけることができるIDを持っていることを確認する必要がありますJavaScript。通常、サーバーコントロールに使用するIDは、ASP.NETによって多少変更されます。私はこれをoversimplifyingんだけど、一般的に、あなたはこれを行うことができます。

<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ページがコントロールに割り当てるどんなIDです。これは、そのコントロールに割り当てられているIDをスクリプトに直接書き込むことを指示します。

関連する問題