简单的等待脚本
本文关键字:脚本 等待 简单 | 更新日期: 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)和一个简单的页面来轮询任务是否完成,然后重定向到结果页面。