2015-04-06 133 views
0

我有一个单击事件按钮,我希望当用户单击它来打开另一个页面,但是来自同一个问题。在另一个选项卡中打开另一个asp.net页面

我想这

Response.Write("<script>window.open('http://www.google.com.hk/','_blank');</script>"); 

但问题是,它会打开的页面不是在新标签

我怎样才能在新标签中打开它?

+1

如果你发现自己使用'Response.Write'注入代码或标记到网页,你这样做是不对的。总有一个更好的办法。 – mason 2015-04-06 13:23:31

回答

2

试试这个

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key", "window.open('http://www.google.com.hk/','_blank');", true); 
+0

它正在工作,但我正在寻找一些解决方案,我只是把网页的名称,没有完整的网址,因为我不知道客户将在哪个端口上部署此应用程序。请你帮忙 – 2015-04-06 10:44:02

+0

但是它会映射到一些域? – Mairaj 2015-04-06 10:46:50

+0

我改变了哟这个'ScriptManager.RegisterClientScriptBlock(this,this.GetType(),“key”,“window.open('EmailTemplate.aspx?emailAddress ='+ emailAddress +'','_ blank');”,true);'现在它正在工作,但你认为这是正确的吗?加上一个,我会接受你的答案,当系统允许 – 2015-04-06 10:47:51

1

我宁愿用RegisterStartupScript而不是RegisterClientScriptBlock

以下是使用RegisterStartupScript的方法。你应该在你的情况下使用它。

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "ReportPage", "javascript:window.open('EmailTemplate.aspx?emailAddress="+emailAddress+"','_blank');", true); 

因为当你使用RegisterStartupScript,它会在页面(表单的结束标签前右)的所有元素渲染后,你的脚本。这使脚本可以调用或引用页面元素,而不会在页面的DOM中找到它们。

另一方面,当您使用RegisterClientScriptBlock时,该脚本会紧接在Viewstate标记之后,但在任何页面元素之前呈现。由于这是一个直接脚本(不是可以调用的函数,它会立即被浏览器执行,但是浏览器在这个阶段没有在页面的DOM中找到标签,因此你应该会收到一个“找不到对象”错误。

更多细节现在参观this答案。

相关问题