【问题标题】:Delay display message by some time in asp.net c#在asp.net c#中延迟显示消息一段时间
【发布时间】:2016-09-25 17:49:45
【问题描述】:

我有一个标签,我想要的只是将标签显示为“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”没有按我的意愿显示。我试过这些链接,

How do I get my C# program to sleep for 50 msec?

How to trigger a timer tick programmatically?

没有帮助。这个Using the ASP.NET Timer Control with Multiple UpdatePanel Controls 似乎有效,但这会继续刷新页面。我不希望这种情况发生,它应该显示 name1 然后等待 5 秒,显示 name2 然后停止。

【问题讨论】:

  • 如果您使用服务器端代码,页面将始终刷新。您需要使用客户端 js 来完成此操作。

标签: c# asp.net timer


【解决方案1】:

这可以仅使用提供的内容来完成,它应该运行一次,所以一旦滴答声完成,我们就会禁用计时器。

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

【讨论】:

    【解决方案2】:

    根据其他贡献者的建议,您应该使用客户端代码来获得这种行为。在您的代码示例中,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);
    

    如果标签的 ID 被 ASP.NET 破坏,您可以在客户端代码中使用 <%= Label1.ClientID %> 而不是 Label1

    【讨论】:

      【解决方案3】:

      您无法像在 ASP.NET 中那样处理此问题,因为您总是会从 form_load 事件中获得最终结果。您将不得不使用JavaScript timing events 在客户端处理此问题。

            <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>
      

      【讨论】:

        【解决方案4】:

        您可以在 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";
            }
         }
        

        如需更多帮助,您可以查看herehere

        【讨论】:

        • 谢谢你,这就是我要找的,你能不能让计时器在它更改为 name2 后停止。
        • 是的,您可以这样做,只需禁用计时器,因为您已在页面加载中启用它。
        【解决方案5】:

        您提到的更改必须在客户端,使用javascript setTimer 方法并将标签更新为您需要的任何文本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多