我正在构建一个应用程序,其中包含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));
......,其中“文件”是我给发布文件集合中包含的单个HttpPostedFile对象指定的名称,该文件包含在文件上载控件中。 “路径”是文件应保存到的文件夹路径,“名称”是文件保存的名称。
所以:还有另一种方法来编码此特定函数,该方法将FileUploader的活动保持在应有的独立状态吗?因为我什至尝试使用Javascript阻止父页面刷新,但仍无济于事。
编辑2:该问题现在已解决,但我仍然有疑问。在尝试了多种替代方法(Ajax工具套件等)均未成功后,我在Visual Studio 2017中打开了我的项目的副本-我之前在VS2015中进行了构建-并在调试器中进行了调试。流血的文件上传器是第一次工作。没有多余的回发,没有麻烦。
所以看来问题出在我的开发软件上,尽管我无法想象到底出了什么问题。但是解决的问题就是解决的问题。
尝试在您的web.config中尝试
<configuration>
<system.web>
<xhtmlConformance mode="Legacy" />
</system.web>
</configuration>