轻松等待脚本

时间:2014-06-30 16:52:58

标签: c# asp.net timer webforms wait

我试图在我的网络表单中实现一个简单的等待功能,它可以工作,但不是我想做的。 我的代码是这样的:

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

问题是标签文字没有&#39;每6秒更换一次。

此脚本应使用30秒并以这种方式更改标签文本:

&#34; Invio:我&#34;每6秒钟一次。

相反,它会等待6秒,然后更改&#34; Invio 4&#34;中的文字。

为什么?

3 个答案:

答案 0 :(得分:1)

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

这是一个小提琴,可以检查你是否想要这样的东西 - Fiddle demo

 var count = 1;
time = setInterval(function(){

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

答案 1 :(得分:0)

这样的后端:

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

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

答案 2 :(得分:0)

不幸的是,没有简单的方法可以完全使用基本的Asp.Net webforms(除非你使用Asp.Net Webforms AJAX - 我个人觉得非常困惑)。

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