我有一个单击事件按钮,我希望当用户单击它来打开另一个页面,但是来自同一个问题。在另一个选项卡中打开另一个asp.net页面
我想这
Response.Write("<script>window.open('http://www.google.com.hk/','_blank');</script>");
但问题是,它会打开的页面不是在新标签
我怎样才能在新标签中打开它?
我有一个单击事件按钮,我希望当用户单击它来打开另一个页面,但是来自同一个问题。在另一个选项卡中打开另一个asp.net页面
我想这
Response.Write("<script>window.open('http://www.google.com.hk/','_blank');</script>");
但问题是,它会打开的页面不是在新标签
我怎样才能在新标签中打开它?
试试这个
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key", "window.open('http://www.google.com.hk/','_blank');", true);
它正在工作,但我正在寻找一些解决方案,我只是把网页的名称,没有完整的网址,因为我不知道客户将在哪个端口上部署此应用程序。请你帮忙 – 2015-04-06 10:44:02
但是它会映射到一些域? – Mairaj 2015-04-06 10:46:50
我改变了哟这个'ScriptManager.RegisterClientScriptBlock(this,this.GetType(),“key”,“window.open('EmailTemplate.aspx?emailAddress ='+ emailAddress +'','_ blank');”,true);'现在它正在工作,但你认为这是正确的吗?加上一个,我会接受你的答案,当系统允许 – 2015-04-06 10:47:51
我宁愿用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答案。
如果你发现自己使用'Response.Write'注入代码或标记到网页,你这样做是不对的。总有一个更好的办法。 – mason 2015-04-06 13:23:31