在使用 ASP.Net 控件时设置客户端“onclick”事件是否有最佳实践?简单地添加 onclick 属性会导致 Visual Studio 警告 onclick 不是该控件的有效属性。在 Page_Load 事件期间通过代码隐藏添加它是可行的,但没有我想要的那么清楚。
只有这两个选择吗?有没有我想念的正确方法来做到这一点?
谢谢!埃里克·斯普尔
在使用 ASP.Net 控件时设置客户端“onclick”事件是否有最佳实践?简单地添加 onclick 属性会导致 Visual Studio 警告 onclick 不是该控件的有效属性。在 Page_Load 事件期间通过代码隐藏添加它是可行的,但没有我想要的那么清楚。
只有这两个选择吗?有没有我想念的正确方法来做到这一点?
谢谢!埃里克·斯普尔
**
只是对答案的预先说明: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 函数)。这些调用应该在窗口加载事件处理程序中进行
考虑阅读有关 Quirksmode 的高级活动注册文章以获取更多信息。
另外,考虑使用像jQuery这样的库。这样,语句将变为
$('#myLovelyButtonId').click(
function doSomething () {
alert('my lovely code here');
});
设置值WebControl.Attributes["onclick"]
是可以的。如果 ASP.NET 需要客户端click
处理程序,它将连接值,以分号分隔。
修正语法或拼写错误。
澄清意义而不改变它。
纠正小错误。
添加相关资源或链接。
永远尊重原作者。