【问题标题】:Prevent postback of page in iframe from causing main page postback asp.net C#防止iframe中页面的回发导致主页回发asp.net C#
【发布时间】: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


【解决方案1】:

在你的 web.config 中尝试一下

<configuration>
    <system.web>
        <xhtmlConformance mode="Legacy" />
    </system.web>
</configuration>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多