【问题标题】:Cross-page posting with target _blank leaves source page unfunctional使用目标 _blank 跨页发布会使源页面无法正常工作
【发布时间】:2012-11-06 08:32:59
【问题描述】:

我试图用尽可能少的步骤来描述它: 我有 Page1.aspx 有很多控件,其中包括预览和保存按钮。我也有 Page2.aspx,它是预览按钮单击的重定向目标。

由于我需要从 Page1 中选择所有控件来在 Page2 上绘制预览,因此重定向是通过设置 Preview 的 PostBackUrl 来完成的。 我还必须在新选项卡或窗口上显示预览,所以我使用onClientClick="aspnetForm.target='_blank'" 来定义预览按钮。

保存按钮单击回调,在将数据存储到数据库后会重定向到某些 Page0.aspx(报告的初始列表 - 代码的主题)

预览按钮工作正常 - 预览在新选项卡中呈现,但是当我转到旧选项卡并单击保存时,我从调试器中看到,首先加载了 Page2.aspx(?),然后加载了 Page1.aspx。然后所有数据都存储在db中,但是虽然执行了Page0重定向,但Page1.aspx仍然加载在浏览器中。

我不知道这背后是什么过程。有知道的可以给我介绍一下吗?或者,如果您认为我的方法无法实施,请给出一些想法如何做到这一点?

如果很重要,Page1 上的所有内容都位于更新面板中。

非常感谢您的回复

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    在 ASP.NET 中,基本上有零 (0) 种情况,您将表单数据从一个页面发送到另一个页面。尽管您想要完成的具体内容含糊不清,但您可以考虑以下几点:

    • 将独特的操作/系统隔离到一个页面。如果你有类似用户配置文件的东西,不要有三个不同的 aspx 页面;只需为用户或管理员使用一个页面来管理该数据/功能。回发事件是您的朋友。
    • 了解 ViewState 与传统表单数据的区别。我猜如果您尝试将表单数据从一个页面发布到另一个页面,您可能不理解 ViewState 的意义。使用单个页面来维护用户当前正在使用的临时数据是 ViewState 的一大用途。如果您希望数据显示在另一页上,则需要将上一页中的数据视为最终数据,因此应将其保存到数据库或其他介质中。

    这些只是一些一般性的指导方针,因为如果不说“你做错了”之类的笼统的话,就没有确切的答案可以解决你的问题。我建议从不再尝试将表单数据从一个 aspx 页面发布到另一个页面开始。

    【讨论】:

    • 场景是:Page1 用于为一个非常大的 Web 系统创建报告模板 - 包含具有多个下拉列表和输入的大量行。预览按钮的目的是让用户获取当前选择的绘制报告(在新页面中 - 已编写的具有现有功能的页面),如果模板构建良好,则将模板保存到数据库(单击保存) .此外,所有提到的控件实际上都是用户控件的一部分,包含在几个页面中(Page1.aspx 就是其中之一)
    • 感谢您指出这个 Asp.Net 原则,从现在开始我会牢记在心,但这里我受限于现有框架。我不确定在预览单击时将所有临时值保存到数据库并稍后在 Page2 上使用它们是否具有建设性? (您所说的原则 2)最好的帮助是了解为什么两个页面都是从旧选项卡的回发中加载的,并且选项卡被搞砸了?如果将有助于处理该问题,否则我将进行一些更广泛的重构。再次感谢您
    • 是的,你完全正确。将您需要的数据保存在第 1 页,如果您需要预览按钮,请使用查询字符串将数据发送到下一页或您提到的其他方式(保存到数据库,然后在另一页上加载数据)。
    • 你说的原则是对的。我尝试了不同的方法,但最后将 Page1 数据存储在会话中是最简单的。我所做的是通过 JQuery(在预览单击时)向 Page1.aspx 动态添加一个新表单,其唯一目的是调用 Page2。它的目标设置为 _blank,因此它将在新窗口中打开。 Page2 需要来自会话的数据
    猜你喜欢
    • 1970-01-01
    • 2018-03-15
    • 2013-05-07
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多