2

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

只有这两个选择吗?有没有我想念的正确方法来做到这一点?

谢谢!埃里克·斯普尔

4

4 回答 4

2

**只是对答案的预先说明: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>
于 2008-10-08T13:09:32.193 回答
2

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

基本上,代码将是

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

对于 Internet Explorer 和

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

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

考虑阅读有关 Quirksmode 的高级活动注册文章以获取更多信息。

另外,考虑使用像jQuery这样的库。这样,语句将变为

$('#myLovelyButtonId').click(
    function doSomething () {
        alert('my lovely code here');
    });
于 2008-10-08T13:14:53.447 回答
1

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

于 2008-10-08T13:08:31.870 回答
-1

修正语法或拼写错误。

澄清意义而不改变它。

纠正小错误。

添加相关资源或链接。

永远尊重原作者。

于 2009-06-19T11:43:41.770 回答