目前,发展更是一种爱好;如果这是一个基本问题,请道歉,虽然在网上搜索几个小时后我似乎无法找到答案。我目前正在为我的团队构建一个支持工具,该工具运行了许多SQL查询和BCP处理并返回结果。其中一些操作需要一段时间,我想用状态消息更新Web UI。以前我一直在使用Label1.Text = text;
但是现在我想在我的方法运行时多次更新Label1.text。尽可能尝试,但它只显示方法中的最后一次更新。
我编写了一个小测试来尝试深入研究: -
网页
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Template._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="progress" runat="server" Text=""></asp:Label><br />
<asp:Image ID="Image1" runat="server" ImageUrl="~/Image/loader.gif"
Visible="False" />
</div>
</form>
</body>
</html>
C#CodeBehind
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.Odbc;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
namespace Template
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
uiUpdate("OUT", 1);
wait();
uiUpdate("In", 0);
}
protected void uiUpdate(string text, Int32 image)
{
if (image == 1)
{
Image1.Visible = true;
}
else
{
Image1.Visible = false;
}
progress.Text = text;
}
protected void wait()
{
DateTime wait;
wait = DateTime.Now + TimeSpan.FromSeconds(10);
while (wait > DateTime.Now)
{
}
}
有没有办法让Label1&amp;要在Page_load运行时更新图像吗?
或者我是以完全错误的方式看待这种情况(毫无疑问!)
由于
答案 0 :(得分:2)
HTML作为整页请求并不是最简单的:
所有更新都发生在中间的子弹中,所以没有:没有办法让浏览器更新:您的代码在服务器上执行,没有与客户端对话
如果您需要这种类型的行为,您将不得不查看AJAX工具 - 在每个步骤执行“足够”工作以进入下一个里程碑并更新标题...使用常规ASP.NET {{3可能有趣;对于MVC或其他(非ASP.NET)设置,jQuery将是你的朋友。不幸的是,这不是一个微不足道的话题。
答案 1 :(得分:1)
如果我理解你的问题是正确的,你不能在常规的asp.net中这样做,你需要使用ajax,并制作一个ajax方法,然后在运行时更新标签的文本。您可以使用ajax MS scriptmanager来执行此操作。 如果不是为了高性能,你可以使用update panel,否则你应该自己使用脚本管理器。