【发布时间】:2017-08-10 19:38:16
【问题描述】:
我正在构建一个应用程序,该应用程序具有包含在 iframe 中的文件上传器。上传者使用第二个按钮来触发实际的上传事件。上传事件有效,但是当我单击上传按钮时,它会导致包含显示我的上传程序的 iframe 的页面也刷新。上传者和违规上传按钮都包含在 iframe 中显示的页面中,并且 iframe 本身以这种方式包含在我的主页中:
<iframe id="uploaderFrame" src="FileUploader.aspx"></iframe>
我尝试将 iframe 包装在 UpdatePanel 中,并将 ChildrenAsTriggers 设置为 True,但问题仍然存在。我的上传页面和我的主页都在同一个应用程序中。
奇怪的是,只有当用户选择了要上传的文件时才会发生这种情况。如果在上传器中没有发布文件的情况下单击上传按钮,则主页不会回发。
需要说明的是:我对 iframe 中的页面进行回发的问题为零。这正是应该发生的事情。它包含 iframe 的页面正在做回发,这就是问题所在。我怎样才能阻止这种情况?
编辑:经过进一步的努力,我确定问题出在发布到 FileUpload 控件的文件实际保存到服务器的那一刻。我发现如果我注释掉实际发生这种情况的代码行,则在单击“上传”按钮时父页面不会刷新。
违规行如下所示:
file.SaveAs(System.IO.Path.Combine(Server.MapPath(path), name));
...其中“文件”是我为 PostedFiles 集合中包含的单个 HttpPostedFile 对象指定的名称,该集合包含在 File Upload 控件中。 “Path”是保存文件的文件夹路径,“name”是保存文件的名称。
那么:是否有另一种方法来编写这个特定的函数,以保持 FileUploader 的活动与它自己的页面隔离,就像它应该的那样?因为我什至尝试使用 Javascript 来阻止父页面刷新,但没有任何效果。
编辑 2:问题现已解决,但我仍有疑问。在尝试了多种替代方案(Ajax Tool Kit 等)但均未成功后,我在 Visual Studio 2017 中打开了我的项目副本——我之前一直在 VS2015 中构建它——并在调试器中启动它。血腥的文件上传器第一次工作。没有不需要的回发,没有麻烦。
所以看起来问题出在我的开发软件上,虽然我无法想象到底出了什么问题。但解决的问题就是解决的问题。
【问题讨论】:
-
这不应该发生。 iFramed 内容是否包含任何类型的 framebreaker script 或任何引用
window.top的内容? -
@John Wu 没有你描述的脚本。在我的上传页面中注释掉所有对客户端代码的引用后,我什至尝试运行该应用程序,但问题仍然存在。
-
您是通过单击按钮还是按回车键提交页面?
-
@John Wu 我正在通过点击上传按钮提交页面
-
我还尝试在我的主页上将 EnableViewState 和 EnableSessionState 设置为 true。两者都不快乐。
标签: c# asp.net iframe postback