【发布时间】:2017-03-08 12:52:41
【问题描述】:
所以我知道这是一个常见问题,页面冻结(任何按钮在视觉上都是可点击的,但不执行任何操作),因为它在文件下载后不会关闭某些请求。
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/txt";
response.AddHeader("Content-Disposition", "attachment; filename=" + TreeView1.SelectedNode.Text + ";");
response.TransmitFile(TreeView1.SelectedNode.Value);
response.Flush();
response.Close();
HttpContext.Current.ApplicationInstance.CompleteRequest();
此代码在 TreeView SelectedNodeChanged 事件中,这是一个问题。
例如,如果将传输代码放在某个按钮中,我可以通过在按钮上添加 OnClientClick="javascript:setFormSubmitToFalse()" 来修复页面冻结问题,这个小 JavaScript 修复了下载后页面冻结问题。
<script type="text/javascript">
//Fix page freeze after download dialog
function setFormSubmitToFalse() {
setTimeout(function () { _spFormOnSubmitCalled = false; }, 3000);
return true;
}
</script>
但如果我单击 TreeView 节点,我不知道如何解决此问题。 TreeView 没有OnClientClick,我也尝试在传输代码Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "setFormSubmitToFalse()", true);
之前和之后从后面的代码运行该JS 函数,但它没有帮助,文件下载后页面仍然冻结。
有什么想法可以解决这个问题吗?谢谢。
这是 sharepoint 网站上的 webpart(几乎是 asp.net 页面)。
编辑:
我将尝试更好地解释我的情况以及我想要实现的目标。
所以我的主要目标:在本地网络中有一个包含文档的共享文件夹,将使用此应用程序的用户不应访问此共享文件夹,只有运行应用程序池的实体才能访问它。
我正在发出一些 SQL 请求,它为我提供了一些子文件夹的路径。我正在构建该子文件夹的树视图,当用户单击树视图 SelectedNodeChanged 事件镜头中的某个文件时,我将文件作为应用程序池标识执行传输
SPSecurity.RunWithElevatedPrivileges(delegate()
{
/* transmit file code */
});
一切正常,但如果我理解正确的话,CLIENT 端的某些东西可能会在 TransmitFile 拍摄后冻结页面并阻止向服务器发送任何其他发布请求,这就是为什么我的小 JS 解决方案在执行 OnClientClick 时有效。
这是该修复程序的作者如何解释的原始内容,但我不知道如何将其实现到树视图 https://stackoverflow.com/a/17186011/5805492
【问题讨论】:
标签: c# asp.net sharepoint treeview web-parts