我有这个,但它不起作用......我错过了什么吗?
例如,我需要在按钮点击时使用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;
}
}
谢谢!
答案 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";});
}
}