c# - 如何从后端代码访问进度标签的值属性

标签 c# asp.net html

我正在尝试制作一个进度条,以便在我们对 Excel 文档中的 200,000 多行进行某些“修改”时显示。我只是想尝试一些简单的事情,但我似乎无法从进度标签中获取 value 属性。

例如,如果我有一些简单的事情,例如:

<asp:UpdatePanel ID="upnlPercent" runat="server">
    <progress id="progressPercent" runat="server"></progress>
</asp:UpdatePanel>

还有:

public static void CleanExcelSheet()
{
    for(int i = 0; i < rows.Count; i++)
    {
        ... // Clean whatever
        progressPercent.Value = i / rows.Count;
        upnlPercent.Update();
    }
}

有人知道我可以处理这样的事情的简单方法吗?如果这看起来确实不是一个可行的解决方案,我也愿意接受其他建议。

非常感谢!

最佳答案

您想要做的是将百分比存储在 session 变量 Session["percent"] 中,并为您的更新面板设置一个 Load 处理程序将更新 session 变量的进度。

在客户端,您可以使用 javascript 使更新面板回发并每隔一定的毫秒数进行更新。

要记住的重要一点是,在单独的线程上运行清理功能,这样它就不会阻止您的应用程序,并允许应用程序监听来自更新面板的回发。

以下是如何执行此操作的示例:

aspx:

这是我们的更新面板,其中有一个我们将更新的元素

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load">
    <ContentTemplate>
        <label id="Label_For_Server_Time" runat="server"></label>
    </ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="Button1" runat="server" Text="Click Me" OnClick="Button1_Click" />

在您的 aspx header 中,添加以下代码:

此代码调用更新面板上内置的 asp.net 回发函数,它将触发更新面板的 Load 处理程序,而不刷新整个页面

<script type="text/javascript">
    window.onload = function () {
        setInterval("__doPostBack('<%=UpdatePanel1.ClientID%>', '');", 1000);
    }
</script>

隐藏代码:

这是更新面板的加载处理程序,每次面板从 aspx 页面发回时都会触发,我们检查 session 变量是否存在,并设置标签文本:

protected void UpdatePanel1_Load(object sender, EventArgs e)
{
    if (Session["percent"] != null)
    {
        Label_For_Server_Time.InnerText = Session["percent"].ToString();
    }
}

这是您的函数,我们在单独的线程上运行它,以免阻止应用程序并相应地设置 session 变量。

public void CleanExcelSheet()
{
    new Thread(delegate()
    {
        for (int i = 0; i < 100000000; i++)
        {
            //... your cleaning here

            float _f = (float)i / 100000000;
            Session["percent"] = _f;
        }
    }).Start();
}

protected void Button1_Click(object sender, EventArgs e)
{
    CleanExcelSheet();
}

关于c# - 如何从后端代码访问进度标签的值属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24638278/

相关文章:

c# - 扩展 ShoppingCartInfo 对象以在 Kentico CMS 中添加新的税类

c# - 如何在 asp.net 3.5 session 超时时将用户重定向到默认页面

c# - 在母版页中禁用使用 Enter 键的表单提交

c# - 如何在 ASP.NET 应用程序中使用 Internet Explorer 中使用的代理

支持 HTML5 的 jQuery WYSIWYG 编辑器插件?

c# - 如何在 WPF 中创建一个带有绑定(bind)的验证文本框,在无效输入后切换回最后一个有效值?

c# - 在 C# 中隐藏 Vista/Win 7 上的 Start Orb

asp.net - 通过 HTTP(无 HTTPS)的客户端证书身份验证

javascript - 使用 angular.js 从 JSON 对象填充 HTML 表

javascript - 如果禁用 javascript,则让对话框链接转到 html 登录页面