单击按钮更改UpdateProgress文本

时间:2016-02-01 07:49:00

标签: c# asp.net sharepoint

我有这个,但它不起作用......我错过了什么吗?

例如,我需要在按钮点击时使用UpdateProgess更改文本。

这是我的ascx

<asp:UpdateProgress ID="UpdateProgress2" runat="server"  AssociatedUpdatePanelID="upFormulario">
    <ProgressTemplate>
        <div style="position: fixed; text-align: center; height: 100%; width: 100%; top: 0; right: 0; left: 0; z-index: 9999999; background-color: #000000; opacity: 0.7;">
            <%--<span id="lblInfo" style="border-width: 0px; position: fixed; padding: 50px; background-color: #FFFFFF; font-size: 36px; left: 40%; top: 40%;">Loading...</span>--%>
            <asp:Label id="lblInfo" Text="..." runat="server" style="border-width: 0px; position: fixed; padding: 50px; background-color: #FFFFFF; font-size: 36px; left: 40%; top: 40%;" />
        </div>
    </ProgressTemplate>
</asp:UpdateProgress>

<asp:UpdatePanel ID="upFormulario" runat="server">
...
<table width="100%" cellspacing="0" cellpadding="0">
  <tbody>
    <tr>
      <td width="100%" align="right" nowrap="nowrap">   
        <asp:Button runat="server" Text="Next" ID="btnSave" OnClick="cmdSaveDraft_Click" class="ms-ButtonHeightWidth" />
      </td> 
     </tr> 
  </tbody>
</table>
...
</asp:UpdatePanel>

这是ascx.cs

上的代码
protected void cmdSaveDraft_Click(object sender, EventArgs e)
{
    Label progressMessageLabel = this.UpdateProgress2.FindControl("lblInfo") as Label;
    if (progressMessageLabel != null)
    {
        progressMessageLabel.Text = "Saving...";
    }
    lblAccion = "Loading...";

    int iControl = this.ValidateCtrl();
    if (iControl == 1) 
    {
        return;
    }
}

谢谢!

3 个答案:

答案 0 :(得分:1)

您的UpdateProgress位于UpdatePanel之外,但您的按钮位于更新面板内。

当您使用更新面板时,更新面板中的所有控件 将在ajax中运行,他们不会执行真正的帖子而是ajax请求。在这种情况下,只能从更新面板内控件触发的事件更新更新面板中的控件。

恢复,如果你想要它工作,在更新面板中添加更新进度控件,它将起作用。

答案 1 :(得分:0)

如果单击的按钮启用了Post,那么我认为标签会反映下次刷新页面时的文本更改。 (按钮的点击代码在服务器上执行,而不是客户端。所以它需要页面加载来显示标签的新状态)

如果您希望更改标签文本,而无需刷新,则需要使用Javascript。

string script = "<script type=\"text/javascript\"> document.getElementById("LABEL").text = 'Loading...'; </script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "myscript", script);

我没有对此进行测试,但从理论上讲,它应该允许您更改标签的值,而无需发布页面。 注意 - 您可能必须禁用控件的帖子。不确定。

答案 2 :(得分:0)

也许this answer可以提供帮助:

public void bw_Convert_DoWork(object sender, DoWorkEventArgs e)
{           
    e.Result = e.Argument;
    for (int i = 0; i <  fTable.Rows.Count; i++)
    {
        try
        {
            SqlCommand cmd = new SqlCommand("INSERT INTO TBL_CDR_ANALYZER (LNG_UPLOAD_ID, DAT_START, LNG_DURATION, INT_DIRECTION, INT_CALL_DATA_TYPE, \n" +
                "TXT_TARGET_NUMBER, TXT_OTHER_PARTY_NUMBER, TXT_TARGET_IMSI, TXT_TARGET_IMEI, TXT_TARGET_CELL_ID, TXT_ROAMING_NETWORK_COMPANY_NAME) VALUES \n" +
                "(@UPLOAD_ID, @START_DATE, @DURATION, @DIRECTION, @CALL_TYPE, @TARGET_NUMBER, @OTHER_PARTY_NUMBER, @IMSI, @IMEI, @CELL_ID, @ROAMING_NAME)", sqlCon);
            cmd.Parameters.Add("@UPLOAD_ID", SqlDbType.Int).Value = 1;
            cmd.Parameters.Add("@START_DATE", SqlDbType.DateTime).Value = fTable.Rows[i]["CallDate"];
            cmd.Parameters.Add("@DURATION", SqlDbType.Int).Value = fTable.Rows[i]["CallDuration"];
            cmd.Parameters.Add("@DIRECTION", SqlDbType.Int).Value = GetCallDirection(fTable.Rows[i]["CallDirection"].ToString());
            cmd.Parameters.Add("@CALL_TYPE", SqlDbType.Int).Value = GetCallType(fTable.Rows[i]["CallType"].ToString());
            cmd.Parameters.Add("@TARGET_NUMBER", SqlDbType.VarChar, 25).Value = fTable.Rows[i]["TargetNo"];
            cmd.Parameters.Add("@OTHER_PARTY_NUMBER", SqlDbType.VarChar, 25).Value = fTable.Rows[i]["OtherPartyNo"];
            cmd.Parameters.Add("@IMSI", SqlDbType.VarChar, 50).Value = fTable.Rows[i]["IMSI"];
            cmd.Parameters.Add("@IMEI", SqlDbType.VarChar, 50).Value = fTable.Rows[i]["IMEI"];
            cmd.Parameters.Add("@CELL_ID", SqlDbType.VarChar, 50).Value = fTable.Rows[i]["CellID"];
            cmd.Parameters.Add("@ROAMING_NAME", SqlDbType.NVarChar, 255).Value = fTable.Rows[i]["RoamingCompany"];
            sqlCon.Open();
            cmd.ExecuteNonQuery();
            sqlCon.Close();
        }
        catch (SqlException ex)
        {

        }
        finally
        {
            sqlCon.Close();
        }
        bw_Convert.ReportProgress((100 * i) / fTable.Rows.Count);  
      Label1.Invoke((MethodInvoker)delegate {
        Label1.Text = i.ToString() + "Files Converted";});                 
    }    
}