ASP:HyperLink导航

4

我正在使用asp:hyperlink按钮来打开一个条款和条件弹出窗口。 超链接的代码如下 -

    <asp:HyperLink ID="HyperLink4" Target="_blank"
        NavigateUrl="javascript:window.open('test.aspx');"
        ForeColor="#F58022" runat="server">Terms and Conditions
    </asp:HyperLink> 

当我在浏览器中点击这个URL时,它会打开我的test.aspx页面。但是除了test.aspx之外,它还会打开另一个页面:

  • 该页面的URL为:"javascript:window.open('test.aspx');"
  • 该页面的主体为:[object]

请问您如何摆脱这个不需要的页面?

谢谢


你应该在超链接周围加上代码标记,这样我们才能看到它。 - Stephen Lacy
5个回答

5
使用:-

<asp:HyperLink ID="HyperLink4" Target="_blank"
  NavigateUrl="javascript:window.open('test.aspx'); return false;"
  ForeColor="#F58022" runat="server">Terms and Conditions</asp:HyperLink>

问题在于window.open返回一个窗口对象。javascript:“协议”的一个目的是允许javascript代码生成HTML内容,该内容由协议后面的表达式返回。然后导航到包含该HTML的新页面。
在您的情况下,因为您有Target="_blank",所以会打开一个新页面,并且由window.open打开的对象(新窗口)会调用其toString()方法,并显示在此额外窗口中。
编辑:
我划掉了代码,因为它不起作用。正确的解决方案由silky提供。但是,我不会删除答案,因为问题代码中发生了什么的解释仍然存在。因此,解决方案实际上是:
<asp:HyperLink ID="HyperLink4" href="#"
  onclick="window.open('test.aspx'); return false;"
  ForeColor="#F58022" runat="server">Terms and Conditions</asp:HyperLink>

Target 不再需要,因为它没有被使用。保留作为超链接控件,因为可能有其他原因导致 OP 需要在页面上使用它。


无论如何,提供 hreftarget 属性是一个很好的实践,以防JavaScript未启用。 - LukeH
@Luke:为什么要提供一个从未使用的目标?提供href不仅是一种好习惯,在某些浏览器中,如果没有href,锚点可能无法正常工作。 - AnthonyWJones
@Anthony:如果 JavaScript 被禁用,hreftarget 仍然会被使用。设置 href="test.aspx"target="_blank" 应该能够最接近非 JS 行为的效果,即在新窗口中打开 test.aspx - LukeH
@Luke:我猜这取决于你的受众。在许多内部网站(以及公共网站)中,非JS就是一个不可行的选择,你可能需要更早地处理它。当然,如果你所做的只是window.open,那么你可能根本不需要使用onclick。 - AnthonyWJones
@Anthony:非常正确,但我的客户通常要求(a)用户不应因为没有“正确”的浏览器、未启用JavaScript等而被任意排除在他们的网站之外;(b)当用户的浏览器不完全功能时,网站应尽可能地优雅降级。客户接受JS不可用时某些事情是不可能的,但如果简单的链接在关闭JS时根本不起作用,他们将不会很高兴。 - LukeH
@Luke:没问题。这个问题和我的回答并没有解决__你的__客户需求。然而,__你的__客户并不一定定义了普遍的“最佳实践”。“最佳实践”只能在目的的背景下进行衡量。 - AnthonyWJones

4

你使用 HyperLink 控件的原因是什么?

实际上,你可以使用标准的 HTML 链接(或者 HtmlAnchor 控件),然后使用客户端的 onclick 事件来触发你的 JavaScript:

<a id="HyperLink4" runat="server" href="test.aspx" target="_blank"
    onclick="window.open('test.aspx');return false;"
    style="color:#F58022">Terms and Conditions</a>

2

让它变得更好:

NavigateUrl="javascript:window.open('test.aspx'); return false;"

更好的做法是将此放在OnClientClick中。
NavigateUrl="#" OnClientClick="window.open('text.aspx'); return false"

--编辑:
<asp:LinkButton ID="HyperLink4" Target="_blank"
    NavigateUrl="#" OnClientClick="window.open('text.aspx'); return false"
    ForeColor="#F58022" runat="server">Terms and Conditions</asp:LinkButton >

根据评论更新。


4
我认为 HyperLink 控件没有 OnClientClick 事件/属性,但使用客户端的 onclick 事件而不是 href 是一个好建议。 - LukeH
NavigateUrl="javascript:window.open('test.aspx'); return false;" 这段代码不起作用了吗? - Muhammad Akhtar
穆罕默德和卢克:我忘记了HyperLink没有'onclientclick'。 - Noon Silk

1
 <asp:HyperLink ID="HyperLink4" Target="_blank"
        NavigateUrl="javascript:void window.open('test.aspx');"
        ForeColor="#F58022" runat="server">Terms and Conditions</asp:HyperLink>

0

移除Target=_Blank,你不需要它,JavaScript已经打开了一个新窗口...

提示:要知道为什么它的行为不同,请在浏览器中查看源代码,并检查Web控件在HTML方面生成了什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接