简单的等待脚本

本文关键字:脚本 等待 简单 | 更新日期: 2023-09-27 18:11:02

我试图在我的web形式实现一个简单的等待功能,它的工作原理,但不像我。我的代码是:

    for(int i = 0; i<5; i++)
    {
        Label1.Text = "Invio: " +i;
    System.Threading.Thread.Sleep(6000);
    }

问题是标签文本不是每6秒改变一次。

这个脚本应该使用30秒的时间,并以这种方式改变标签文本:

每隔6秒"Invio: i"一次。

它等待6秒,然后在"Invio 4"中更改文本。

为什么?

简单的等待脚本

发生这种情况的原因是由于视图状态。在呈现页面之前,执行后端代码,在完成后,DOM开始呈现,然后页面就准备好了。这意味着页面不会每隔N秒刷新一次标签值,因为它已经设置好了。如果你想动态地改变这个值,你应该使用一些前端方法,如JavaScript或jQuery。如果你想要这种方法-评论,这样我可以为你做一个小提琴。这也会对你有帮助- ViewState

如果你想要这样的东西,这里是一个小提琴检查-小提琴演示

 var count = 1;
time = setInterval(function(){
    document.getElementById("label1").innerHTML="Indio: " + count;
    count+= 1;
    if (count == 5)
    {
        clearInterval(time);
    }
},6000);

后端如下:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Timer1_Tick(object sender, EventArgs e)
    {
        Label txt = Label1;
        int i = Convert.ToInt32(txt.Text);
        if (i == 4)
        {
            Timer1.Enabled = false;
        }
        else
        {
            i++;
            Label1.Text = i.ToString();
        }
    }
}

和前端是这样的:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Enabled="true" Interval="6000">
            </asp:Timer>
            <asp:Label ID="Label2" runat="server" Text="Invio: "></asp:Label>
            <asp:Label ID="Label1" runat="server" Text="0"></asp:Label>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Timer1" />
        </Triggers>
    </asp:UpdatePanel>
</asp:Content>

循环5次,间隔6秒。

页面上的计时器将触发回发,服务器端将执行并更新updatepanel。

不幸的是,没有简单的方法来做这种事情,纯粹使用基本的Asp。. Net web表单(除非您使用Asp. Net。. Net Webforms AJAX(我个人觉得很困惑)。

假设您正在尝试向用户提供一些反馈,关于长时间运行的操作,我会使用javascript(例如使用JQuery Ajax)和一个简单的页面来轮询任务是否完成,然后重定向到结果页面。