【问题标题】:Open another asp.net page in a different tab在不同的选项卡中打开另一个 asp.net 页面
【发布时间】:2015-04-06 10:39:08
【问题描述】:

我在点击事件上有一个按钮,我希望当用户点击它时打开另一个页面但同样的问题。

我试过了

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

但问题是它打开页面不在新标签中

如何在新标签页中打开它?

【问题讨论】:

  • 如果您发现自己使用Response.Write 将代码或标记注入网页,那么您做错了。总会有更好的方法。

标签: c# asp.net .net


【解决方案1】:

试试这个

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

【讨论】:

  • 现在它正在工作,但我正在寻找一些解决方案,我只是在其中放置页面的名称,没有完整的 url,因为我不知道客户将在哪个端口上部署它应用程序。你能帮忙吗
  • 但是会映射到某个域?
  • 我将您的代码更改为ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key", "window.open('EmailTemplate.aspx?emailAddress="+emailAddress+"','_blank');", true);,它现在可以工作了,但是您认为这是正确的吗?加一,系统允许时我会接受你的回答
  • 你说的这个是什么意思,我没听明白吗?
  • 这是最好的方法吗?
【解决方案2】:

我更喜欢使用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答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 2010-10-30
    • 2014-01-25
    • 1970-01-01
    • 2015-01-19
    • 2013-05-14
    • 2015-11-14
    • 1970-01-01
    相关资源
    最近更新 更多