我有一个带有通过用户控件构建的转发器的 aspx 网络表单页面。每个中继器项目都有一个链接按钮。我想要发生的是,当单击 LinkButton(在页面 A 的用户控件上的中继器中)时,会在新选项卡中打开 url,并传递该 LinkButton 旁边的隐藏 ID(根据 Web 开发安全性最佳实践如果可能)到新选项卡中的 aspx 页面(页面 B)。
页面 A 和页面 B 都在同一个应用程序中。
我上面描述的目的是让用户在从通过单击链接按钮打开的 URL 返回后可以轻松地返回到他们的搜索结果。
我对如何做到这一点的想法持开放态度,这些想法更接近标准的最佳实践方法。
到目前为止,我已经尝试过:
1) 跨页发布——这适用于传递 id,但不适用于在新标签中打开。
2)将 PostBackUrl 设置为页面 B 的 url,使用 OnClientClick 调用 javascript 设置 Page.Form.Target="_blank" 以将来自用户控件的隐藏 ID 设置为页面 B 上的 html 隐藏输入的值。
3) 我还尝试在 OnClientClick 中使用 window.open("page B url", "_newtab")。
-
a) 到目前为止,唯一有效的方法是上述 3 种不同方法中的第 2 种。
但是,在新选项卡中加载页面 B 后,我不知道如何将页面 A 的 Page.Form.Target 重置为之前的状态,然后将其设置为“_blank” -
b)我尝试过的重置 Page.Form.Target 的方法是:
-
1) 重置页面 A 的 Page_Load 中的目标,其中 IsPostBack == true --> 导致页面 B 加载与页面 A 相同的内容。
-
2) 在页面A的用户控件的Page_Load中重置目标->与方法1相同的结果
-
3)在页面A的用户控件中重置页面A的用户控件的LinkButton的OnUnLoad中的目标-->与方法1相同的结果
-
4) 通过 LinkButton 的 OnClientClick 重置 javascript 中的目标 --> 不起作用
-
5) 使用来自页面 A 的包含对页面 A 表单的引用的公共变量重置页面 B 的 Page_Load 中的目标
(类似于可以通过跨页面发布完成的操作)--> 不起作用。
我想接下来尝试的是:
1) 在页面A上包装另一个用户控件以显示页面B的内容,在asp面板(面板B)中
2) 将页面B的内容放入新的用户控制页面
3) 将页面A上的搜索结果内容包装在一个asp Panel(Panel A)中。
4) 当新用户控件上的repeater中的LinkButton被点击时,Panel A中的搜索结果内容将被隐藏,Panel B将显示出来。
5) 当用户想要返回搜索结果时,点击Panel B内容中的“Return to Search”链接按钮,Panel B会被隐藏,Panel B的内容会被清除,Panel A会再次显示。
我还不确定这是否会奏效。
看起来这应该不是那么困难。
这是一个直截了当的概念,我认为这是 Web 开发中相当普遍的情况。
我觉得 Wiley Coyote 试图抓住 Road Runner,因为我想出了精心设计的聪明、深思熟虑的计划,但都完全失败了。
我现在举着一个小牌子,上面写着:“救命!