【问题标题】:Weird trouble - cannot assign javascript to linkbutton奇怪的麻烦 - 无法将 javascript 分配给链接按钮
【发布时间】:2010-10-07 21:45:11
【问题描述】:

我似乎事先多次管理相同的任务;但目前我完全被最简单的事情困住了,这让我很恼火

我需要将 javascript 分配给 ASP.Net 链接按钮(或超链接,没关系) 什么似乎更容易?

我用这样的代码做了十亿次

        //lbHeader.Attributes.Add("onclick",
        //    string.Format("ToggleSelectionPopup('{0}');return false;", panelContainer.ClientID));

但它不起作用。我得到的 HTML 包含 javascript:__doPostback (blahblahblah) 并忽略了我的客户端“onclick”功能。相反,当我单击按钮时页面会回发(尽管“onclick”功能正确附加在“查看页面源”HTML中

我尝试应用一些技巧和方法,例如以下

1) 用超链接替换 ​​LinkBut​​ton - 效果仍然相同,当我单击 href 时页面转发到“NavigateURL”。

2) 在声明式布局中分配“OnClientClick”属性 - 效果相同,页面无论如何都会回发并忽略“onclick”

3) 将“javascript:ToggleSelectionPopup(blahblahblah)”指定为超链接的 NavigateURL 和链接按钮的 PostBackURL。也不行

这两个技巧都没有帮助。我做错了什么,有什么想法吗?

我只需要摆脱该控件的糟糕服务器性能,但我该怎么做呢?当然,我可以手动使用 " 制作 LiteralControl,但我不想使用这种粗略的方法。

帮助高度赞赏

【问题讨论】:

    标签: asp.net button hyperlink


    【解决方案1】:

    ASP.NET 控件 Button 和 LinkBut​​ton 将始终进行回发。您可能使用 OnClientClick 属性添加的 javascript 将在回发之前执行,但不会阻止回发。

    您可以通过以下方式使用 HyperLink 控件:

    <asp:HyperLink runat="server" ID="hyperlink1" NavigateUrl="JavaScript:alert('!');">Test</asp:HyperLink>
    

    我注意到您正在使用变量名 lbHeader。您确定将 javascript 添加到正确的控件而不是随机标签中吗?

    【讨论】:

      【解决方案2】:

      作为一个选项,您可以尝试 HtmlAnchor 控件。

      在 onclick 属性 return false; 足以停止重定向。

      <a href="not_importans.htm" onclick="javascript:someothermethod();return false;">Trial Link</a>
      

      但您的代码看起来不错。你检查你的 LinkBut​​ton 的 HTML 输出吗? 也许分配给 onclick 属性的其他代码。

      【讨论】:

        【解决方案3】:

        你是不是忘了把"javascript:"放在你的字符串的开头? [傻我]

        我用于这种事情的代码如下所示:

        myLinkButton.SetAttribute("onclick", "javascript:if(someCondition()) return false;");
        

        ...但我想这与Attributes.Add 的作用几乎相同。

        您的代码对我来说看起来不错。我的猜测是该属性被页面生命周期中的其他内容覆盖。在页面的 Render 中添加一个断点并在那里查看您的 LinkBut​​ton 的属性集合。还要检查呈现的 HTML,看看你的 javascript 是否出现在那里。

        【讨论】:

        • onclick 事件处理程序是隐含的脚本调用
        • 渲染的 HTML 没问题,我检查了“查看源代码”。原因是 NavigateURL 触发而不是“onclick” 因为我以前从未遇到过它,我想“onclick”覆盖了 NavigateUrL ,现在它没有?我不知道为什么,也许我以前用的是 Mozilla 而不是 IE?我需要检查
        • 浏览器应该无关紧要,就像你说的:我每天都使用这段代码。当您查看源代码时,您能否准确地剪切和粘贴您在 onclick 和 href 中看到的内容?谢谢。
        【解决方案4】:

        您可以使用 LinkBut​​ton 控件并向 OnClientClick 添加一个 javascript 函数调用。这将在客户端验证之前和回发之前(显然)被调用。如果您需要在验证之后但在回发之前执行此操作,那么您可以使用“Page_ClientValidate()”在 OnClientClick 中手动调用客户端验证;

        <script type="text/javascript">
        function someJsYouWant()
        {
          alert('HelloSO');
        }
        </script>
        
         <asp:LinkButton ID="btnSearch" 
                 runat="server"
                 OnClientClick="Page_ClientValidate(); someJsYouWant();"
                 onclick="btnSearch_OnClick">Search</asp:LinkButton>
        

        【讨论】:

          【解决方案5】:

          由于我不是.NET,而是Html/Javascript/Ajax,也许我错了,但是如果你使用onclick方式,对于某些浏览器,你还必须添加:href= “javascript:void(0);”。这样,只会执行 onclick。

          【讨论】:

            【解决方案6】:

            有点不清楚您要做什么。您的 javascript 中有一个无效的 if 语句。试试这个(它有效 - 我试过了):

            hrefHeader.NavigateUrl = String.Format("javascript:toggleSelectionPopup('{0}');", panelContainer.ClientID);
            

            【讨论】:

              【解决方案7】:

              您确定在调用 toggleSelectionPopup 时没有收到运行时错误吗?

              【讨论】:

                【解决方案8】:

                谢谢大家,问题已经解决了

                javascript:void(0) 似乎是正确的方法。

                通过以下方式描述了我的超链接

                <asp:Hyperlink  ID="hrefHeader" Text="lbHeader" runat="server"  Font-Size="Large" Font-Italic="true" 
                 CausesValidation="False"  NavigateUrl="javascript:void(0);" ForeColor="#0033CC" >
                </asp:Hyperlink>
                

                “onclick”开始触发。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-02-16
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多