如何从后端代码访问进度标记的value属性

时间:2014-07-08 17:40:15

标签: c# asp.net html5

我正在尝试制作一个进度条,以便在一些“修改”期间显示我们正在从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();
    }
}

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

非常感谢!

2 个答案:

答案 0 :(得分:1)

在服务器端,progressPercent的类型为HtmlGenericControl,允许您获取/设置如下属性:

progressPercent.Attributes["value"] = (i / rows.Count).ToString();

或者,如果该属性尚未存在,则可能必须执行以下操作:

progressPercent.Attributes.Add("value", (i / rows.Count).ToString());

答案 1 :(得分:1)

您想要做的是将百分比存储在会话var Session["percent"]中,并将Load处理程序设置到更新面板,您可以在其中更新会话变量的进度。

在客户端,您可以使用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标头中

,添加以下代码:

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

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

代码背后:

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

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

这是你的功能,我们在一个单独的线程上运行它,不会阻止应用程序并相应地设置会话变量。

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();
}