我正在使用SPLongOperation来执行冗长的操作。完成后,齿轮页面重定向回原始页面,从该页面启动长操作。我无法使用SPLongOperation.Endscript向oriignal页面写任何内容。这是我正在使用的代码
using (SPLongOperation operation = new SPLongOperation(this.Page))
{
//.......................
//.......................
StringBuilder endScript = new StringBuilder();
endScript.Append("document.write('Success!!');");
operation.End(Request.Url.ToString(), SPRedirectFlags.UseSource, HttpContext.Current, String.Empty, endScript.ToString());
}
答案 0 :(得分:0)
您将无法向呼叫页面写任何内容,在您的操作正在进行时,已经创建了一个新的http请求以向您显示带有旋转轮的页面,然后您将被重定向回指定的URL (使用新请求)。
显示成功消息的最简单方法是通过将string.empty参数替换为
,将特定的查询字符串传递给调用的URLoperation.End(Request.Url.ToString(), SPRedirectFlags.UseSource, HttpContext.Current, "success=1");
http://msdn.microsoft.com/en-us/library/ms450341.aspx
然后在load事件中,检查你是否有这个参数并显示相关的消息(最好将一个项添加到HttpContext.Items或做一个帖子而不是获取删除查询字符串但建议实现将阻止您更改长操作调用和行为)
希望这会有所帮助。
答案 1 :(得分:0)
尝试提醒 - 这对我有用..
Script.Append("alert('Success!!');");
答案 2 :(得分:0)
这可能会有所帮助:http://www.sharepoint-tips.com/2012/07/reporting-code-errors-when-running-code.html
SPLongOperation longOp = new SPLongOperation(this.Page);
StringBuilder sbErrors = new StringBuilder();
longOp.Begin();try
{
throw new Exception("Sample");
}
catch(Exception ex)
{
sbErrors.Append("An error occurred: " + ex.MEssage);
}
if
(sbErrors.Length > 0)
{
longOp.EndScript("document.getElementById('s4-simple-card-content').innerHTML = \"Errors have occurred during the submission. Details: " + sbErrors.ToString() + " \";");
}
//close the dialog if there were no errors
longOp.EndScript("window.frameElement.commitPopup();");