0

我正在尝试使用按钮单击在新选项卡/窗口中打开页面。我查看了与此类似的解决方案,但给出的答案要么使用链接,要么在同一窗口中打开。我需要使用一个按钮,因为它需要根据表单中输入的标准数据(字符串操作)生成链接。但是,此按钮未提交表单;它只是验证外部站点上的一些数据。我需要在不同的窗口或选项卡中使用它,以便他们可以在我的表单和验证站点之间来回切换。这基本上是我目前的Button_Click活动:

var Address = AddressTextbox.Text.Trim();
Address = Address.Replace(' ', '+');
var Url = "http://www.example.com/query?text=" + Address + "&param1=foo&param2=bar";
Response.Redirect(Url);

这有效,Response.Redirect(Url)只是只在同一个窗口中打开,而不是新窗口。

4

2 回答 2

6

只需从 Button 上的 Click 事件处理程序中吐出 javascript 代码。

var Address = AddressTextbox.Text.Trim();
Address = Address.Replace(' ', '+');
var Url = "http://www.example.com/query?text=" + Address + "&param1=foo&param2=bar";
Page.ClientScript.RegisterStartupScript(this.GetType(), "dsadas", "window.open('"+Url+"');", true);
于 2012-05-10T16:04:57.490 回答
3

使用OnClientClick属性:

<script type="text/javascript">
    redirectToPage = function(url){
        void(window.open(url, "child_window"));
        return false;
    }
</script>
<asp:Button ID="Button1" runat="server"
    Text="Click Me!"
    OnClientClick="return redirectToPage('/somefolder/somepage.aspx');" />

使用该OnClientClick属性,重要的是要记住return false最后,否则按钮单击将触发回发。

编辑

如果您想从 click 事件处理程序打开一个新窗口,您可以执行以下操作:

protected void Button1_Click(object sender, EventArgs e)
{
    Page.ClientScript.RegisterStartupScript(Page.GetType(), "open_window", 
        string.Format("void(window.open('{0}', 'child_window'));", "/somefolder/somepage.aspx"), true);
}

诚然,这有点难看,但是如果在执行按钮单击逻辑之前您不会拥有某些信息,那么这可能是您的最佳选择。如果有任何方法可以在单击按钮之前构建 URL,则只需分配OnClientClickin 代码隐藏。

于 2012-05-10T15:57:14.857 回答