如何在回发事件后删除 target='_blank'?

How to remove target='_blank' after postback event?

我在 asp 页面上添加了一个按钮,我正在服务器端执行一些进程,然后将 link 重定向到另一个页面。

我在页面中所做的是在 asp:Button OnClientClick 事件上调用一个方法,在该事件中我分配了一个 aspnetForm.target='_blank' 来在不同的选项卡中导航页面。

ASP.NET 代码:

<asp:Button ID='btn' runtat='server' OnClientClick='ShowPage();' Text='Show Page' />

JavaScript 代码:

function ShowPage() {
    aspnetForm.target = '_blank';
}

我正在使用 Response.Redirect() 方法来导航页面。只有在服务器端验证所需的验证后才会调用此方法。

C#.NET 代码

If (ValidData())
{
   Response.Redirect('myPage.aspx?preview=true', True);
}

验证代码非常庞大,而且在验证过程中还执行了一些进一步的过程。所以,我不能使用 WebMethod 进行 ajax 调用。

一切正常,但问题是还有其他一些 link 和按钮。所以,当我点击其中任何一个时,页面也会针对该特定请求进行重定向,我不想这样做。发生这种情况是因为 `aspnetForm.target='_blank`` 仍然存在于 asp 表单中,它也会对其他 link 执行相同的操作。

我的要求是仅当按下特定按钮时才应在新选项卡中导航页面。其他导航过程应该在同一页面上完成。我想知道是否有任何方法可用于在回发后删除 target = '_blank'

我不能使用 rel='external' 因为我没有使用 anchor<a> 标签。我正在使用 asp:Button,它也在处理一些服务器端事件。

或者有没有其他方法可以在不使用 target='_blank' 方法的情况下在新选项卡中导航页面?

已编辑:

目前我正在使用 Page.ClientScript.RegisterStartupScript() 来执行我的 Popup window 脚本。但是,当弹出窗口阻止程序打开时,它不起作用。所以,我不得不选择另一种方式。

Page.ClientScript.RegisterStartupScript(Me.GetType(), "OpenWindow", "window.open('myPage.aspx?preview=true','_newtab');", True)

我已经使用 setTimeout() 方法解决了我的问题。我在 1000 毫秒后将表单属性 target 重置为 _self

Javascript代码:

function ShowPage() {
    aspnetForm.target = "_blank";
    setTimeout(function() {
        aspnetForm.target = "_self";
    }, 1000);
}

ASP.NET代码

<asp:Button ID='btn' runtat='server' OnClientClick='ShowPage();' Text='Show Page' />

而且,我可以使用我现有的方法 Response.Redirect(),它不会触发 Popup Blocker 消息。

导航新标签页后,formtarget 属性将重置为 _self