Sharepoint 显示SPLONG操作的结果

Sharepoint 显示SPLONG操作的结果,sharepoint,sharepoint-2007,sharepoint-2010,Sharepoint,Sharepoint 2007,Sharepoint 2010,我正在使用SPLongOperation来运行一个冗长的操作。完成后,gears页面重定向回启动长操作的原始页面。我无法使用SPLongOperation.Endscript向原始信号页写入任何内容。这是我正在使用的代码 using (SPLongOperation operation = new SPLongOperation(this.Page)) { //....................... //....................... StringBuilder endS

我正在使用SPLongOperation来运行一个冗长的操作。完成后,gears页面重定向回启动长操作的原始页面。我无法使用SPLongOperation.Endscript向原始信号页写入任何内容。这是我正在使用的代码

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

您将无法向调用页面写入任何内容,当您的操作正在进行时,会发出一个新的http请求,向您显示带有旋转滚轮的页面,然后将您重定向回指定的url(使用新请求)

显示成功消息的最简单方法是将string.empty参数替换为

operation.End(Request.Url.ToString(), SPRedirectFlags.UseSource, HttpContext.Current, "success=1");

然后在load事件上,检查您是否有此参数并显示相关消息(最好向HttpContext.Items添加一个项,或者执行post而不是get来删除querystring,但建议的实现将阻止您更改长操作调用和行为)


希望这会有所帮助。

尝试一个警报-这对我很有用

Script.Append("alert('Success!!');");
这可能会有所帮助:


嗨,谢谢你的回复。不幸的是,我的要求不仅仅是发布一条简单的成功失败消息。长操作创建了一个小xml文件,我必须使用它在调用长运行操作的页面上呈现。我试图用Endscript来完成这个任务。由于文件的大小,我不想通过将其保存在会话变量中来占用服务器资源。但是,在重定向完成时(因此在加载调用页时),有什么阻止您这样做的呢?您可以检查参数,如生成的文件名,如果找到该参数,就可以处理/显示xml文件?如果需要,您仍然可以将其保存在磁盘上,例如使用guid以防止url被篡改。不想将文件保存在服务器上。将生成过多的文件。此外,必须有一个更好的wasy来完成它。那么,为什么不实现类似于长期运行的操作/作业的东西呢?类似的功能允许您提供比SharePoint中旋转轮子上的消息更多的信息,并且在呈现方面也给了您更大的灵活性。
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();");