簡體   English   中英

在asp.net c#中延遲顯示消息一段時間

[英]Delay display message by some time in asp.net c#

我有一個標簽,我想要的只是將標簽顯示為“name1”,然后等待 5 秒鍾,然后將其更改為“name2”。 我就是這樣做的

protected void Page_Load(object sender, EventArgs e)
{
   Label1.Text = "name1";
   System.Threading.Thread.Sleep(5000);
   Label1.Text = "name2";
}

它的作用是總共等待 5 秒,然后顯示“name2”。 “name1”沒有按照我的意願顯示。 我試過這些鏈接,

如何讓我的 C# 程序休眠 50 毫秒?

如何以編程方式觸發計時器滴答?

沒有幫助。 將 ASP.NET 計時器控件與多個 UpdatePanel 控件一起使用似乎有效,但這會不斷刷新頁面。 我不希望這種情況發生,它應該顯示 name1 然后等待 5 秒,顯示 name2 然后停止。

您提到的更改必須在客戶端,使用 javascript setTimer 方法並將標簽更新為您需要的任何文本。

您可以在 UpdatePanel 下的頁面中使用 Timer 控件來實現異步功能(下面提供了有關 ASP.net 中 AJAX 的幫助,提供了鏈接) ,然后在其事件下使用此邏輯更改標簽名稱:

 protected void Page_Load(object sender, EventArgs e)
 {
    Timer1.Enabled = true;
    Timer1.Interval = 5000;
 }

 protected void Timer1_Tick(object sender, EventArgs e)
 {
    if(Label1.Text == "name2")
    {
        Label1.Text = "name1";
    }
    else
    {
        Label1.Text = "name2";
    }
 }

如需更多幫助,您可以在此處此處查看

您無法像在 ASP.NET 中那樣處理此問題,因為您將始終從 form_load 事件中獲得最終結果。 您將不得不使用JavaScript 計時事件在客戶端處理此問題。

      <script>
                $(document).ready(function(){
                 $('#label').val('label1');
                 setTimeout(SetLabel2, 5000); //wait for 5 seconds before setting the label. NOTE: This will keep on repeating until you clear the timeout
                });

                function SetLabel2(){
                  var l = $('#label).val();
                  if(l == 'label2)
                  {
                     window.clearTimeOut(); //So that this does not repeat
                  }
       </script>

正如其他貢獻者所建議的那樣,您應該使用客戶端代碼來獲得這種行為。 在您的代碼示例中, Page_Load函數只需 5 秒即可執行,當服務器上的所有處理完成后,生成的 HTML 最終會發送到瀏覽器……您會看到“name2”。

這是客戶端代碼的 jQuery 版本:

$(document).ready(function () {
    $('#Label1').html("name1");
    setTimeout(function () { $('#Label1').html("name2"); }, 5000);
})

這是一個純 Javascript 版本:

var lbl1 = document.getElementById('Label1');
lbl1.innerHTML = "name1";
setTimeout(function () { lbl1.innerHTML = "name2" }, 5000);

如果 Label 的 ID 被 ASP.NET 弄亂了,您可以在客戶端代碼中使用<%= Label1.ClientID %>而不是Label1

這可以僅使用提供的內容來完成,它應該運行一次,所以一旦滴答完成,我們就禁用計時器。

protected void Page_Load(object sender, EventArgs e)
{
    Timer1.Enabled = true;
    Label1.Text = "name1";
    Timer1.Interval = 2000;
}

protected void Timer1_Tick(object sender, EventArgs e)
{
    Label1.Text = "name2";
    Timer1.Enabled = false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM