C# 如何从Web部件内部停止页面执行

C# 如何从Web部件内部停止页面执行,c#,asp.net,sharepoint,C#,Asp.net,Sharepoint,(我认为这适用于普通ASP.NET web部件和SharePoint托管的web部件) web部件有一个“导出”按钮,该按钮将输出呈现为csv,并设置适当的标题,以便在Excel中打开它 挂接按钮单击事件、清除响应、添加适当的标题和内容类型都很简单- 但是,我注意到,如果将此代码添加到web部件并附加了调试器,那么如果页面上存在此(或任何其他)web部件的多个实例,则没有响应或响应。结束停止处理/页面生命周期,并且所有页面控件的所有事件仍会触发 在本例中,这是浪费,因为其他web部件不需要运行—

(我认为这适用于普通ASP.NET web部件和SharePoint托管的web部件)

web部件有一个“导出”按钮,该按钮将输出呈现为csv,并设置适当的标题,以便在Excel中打开它

挂接按钮单击事件、清除响应、添加适当的标题和内容类型都很简单-

但是,我注意到,如果将此代码添加到web部件并附加了调试器,那么如果页面上存在此(或任何其他)web部件的多个实例,则没有响应或响应。结束停止处理/页面生命周期,并且所有页面控件的所有事件仍会触发

在本例中,这是浪费,因为其他web部件不需要运行—它们所做的任何事情都不会得到响应

有没有停止呈现其他web部件的方法?

简短回答:没有

由于您正在进行完整的回发,HTTP响应流必须包含服务器交付的整个HTML页面

您可以通过某些参数使用ASP.NET输出缓存和刷新缓存,从而允许页面呈现其数据已更改的此类web部件

了解有关ASP.NET缓存的更多信息阅读此文档:

仅用于与ASP兼容

ApplicationInstance.CompleteRequest();

应该做你想做的。

创建另一个页面,为你实现实际的导出功能,然后让导出链接只链接到另一个页面,怎么样


这将解决必须手动结束请求的问题,因为您可以精确地控制响应中的输出。

Postback将返回csv文件,因此不会刷新页面,因此无需重新创建页面。这将起作用,几乎可以肯定是大多数情况下的方法-但是在这种情况下,我有web部件连接提供一些数据(在呈现阶段之前)我会失去这种背景。我的解决方法是设置所有页面控件[]。在OnPreRender上对false可见-至少停止RenderWebPart等的运行。您可以在新窗口中打开链接,这样您就不会离开页面。任何必要的数据都可以通过查询字符串传递或存储在会话变量中。
ApplicationInstance.CompleteRequest();