【问题标题】:Using Javascript With ASP.Net controls将 Javascript 与 ASP.Net 控件一起使用
【发布时间】:2008-10-08 12:56:40
【问题描述】:

在使用 ASP.Net 控件时设置客户端“onclick”事件是否有最佳实践?简单地添加 onclick 属性会导致 Visual Studio 警告 onclick 不是该控件的有效属性。在 Page_Load 事件期间通过代码隐藏添加它是可行的,但没有我想要的那么清楚。

只有这两个选择吗?有没有我想念的正确方法?

谢谢! 埃里克·斯普尔

【问题讨论】:

    标签: asp.net javascript events


    【解决方案1】:

    **只是对答案的预先说明:VS 中的 HTML 验证通常是 BS。它抱怨 IRL 有效的东西,即使这些东西是不好的做法。但有时你必须打破规则才能完成任务。

    每个 ASP.NET 页面(2.0 和更高版本)都带有一个ClientScriptManager。您可以使用它从服务器端代码注册 javascript。当页面上的 HTML 控件都存在于 DOM 中时,您可以在页面加载后传入在控件上注册事件的 javascript。

    它在页面上提供了一个单一、统一的位置来动态添加 javascript,这不是一件坏事。然而,它非常丑陋。

    在这个 ASP.NET 服务器控件模型消亡的时代,您可能希望按照 ASP.NET MVC 未来的方式设置事件。获取jQuery 的副本并将其添加到您的网站。然后,您可以轻松地注册您的活动:

      <html>
      <head>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript">
          $(document).ready(function(){
            $("controlId").bind("click", function(e) { /* do your best here! */ });
          });
        </script>
      </head>
      <!-- etc -->
      </html>
    

    【讨论】:

      【解决方案2】:

      您可以通过 Javascript 将事件添加到您想要的 HTML 元素中。这是最干净的方式,因为它不会混合服务器和客户端技术。此外,这种方式可以将许多处理程序注册到同一个事件(与 onclick 属性相反)。

      基本上,代码是

      document.getElementById('myLovelyButtonId').attachEvent('onclick',doSomething)
      

      对于 Internet Explorer 和

      document.getElementById('myLovelyButtonId').addEventListener('click',doSomething,false)
      

      适用于其他浏览器。 (doSomething 是一个事件处理程序 - JavaScript 函数)。这些调用应该在 window load 事件处理程序中进行

      考虑阅读advanced event registration article on Quirksmode 了解更多信息。

      另外,考虑使用像jQuery 这样的库。这样,语句就会变成

      $('#myLovelyButtonId').click(
          function doSomething () {
              alert('my lovely code here');
          });
      

      【讨论】:

        【解决方案3】:

        设置WebControl.Attributes["onclick"] 的值是可以的。如果 ASP.NET 需要客户端 click 处理程序,它将连接值,用分号分隔。

        【讨论】:

          【解决方案4】:

          修正语法或拼写错误。

          澄清意思而不改变它。

          纠正小错误。

          添加相关资源或链接。

          永远尊重原作者。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多