【发布时间】:2008-10-08 12:56:40
【问题描述】:
在使用 ASP.Net 控件时设置客户端“onclick”事件是否有最佳实践?简单地添加 onclick 属性会导致 Visual Studio 警告 onclick 不是该控件的有效属性。在 Page_Load 事件期间通过代码隐藏添加它是可行的,但没有我想要的那么清楚。
只有这两个选择吗?有没有我想念的正确方法?
谢谢! 埃里克·斯普尔
【问题讨论】:
标签: asp.net javascript events
在使用 ASP.Net 控件时设置客户端“onclick”事件是否有最佳实践?简单地添加 onclick 属性会导致 Visual Studio 警告 onclick 不是该控件的有效属性。在 Page_Load 事件期间通过代码隐藏添加它是可行的,但没有我想要的那么清楚。
只有这两个选择吗?有没有我想念的正确方法?
谢谢! 埃里克·斯普尔
【问题讨论】:
标签: asp.net javascript events
**只是对答案的预先说明: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>
【讨论】:
您可以通过 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');
});
【讨论】:
设置WebControl.Attributes["onclick"] 的值是可以的。如果 ASP.NET 需要客户端 click 处理程序,它将连接值,用分号分隔。
【讨论】:
修正语法或拼写错误。
澄清意思而不改变它。
纠正小错误。
添加相关资源或链接。
永远尊重原作者。
【讨论】: