2008-10-08 45 views
2

當使用ASP.Net控件設置客戶端「onclick」事件時,是否有最佳做法?只需添加onclick屬性就會導致Visual Studio警告:onclick不是該控件的有效屬性。在Page_Load事件中通過代碼隱藏工作添加它,但比我想要的更清晰。使用Javascript與ASP.Net控件

這是唯一的兩個選擇嗎?有沒有正確的方法來做到這一點,我失蹤了?

謝謝! Eric Sipple

回答

2

**只是一個關於答案的提示:VS中的HTML驗證通常是BS。它抱怨IRL工作的東西,即使這些東西是不好的做法。但有時你必須彎曲規則才能完成任務。

每個ASP.NET頁面(2.0及更高版本)都附帶ClientScriptManager。您使用此從服務器端代碼註冊JavaScript。您可以傳入javascript,在頁面加載後,在頁面上的HTML控件全部出現在DOM中時,在控件上註冊事件。

它在頁面上呈現一個單一的統一位置來動態地添加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> 
1

設置WebControl.Attributes["onclick"]的值是可以的。如果ASP.NET需要客戶端click處理程序,它將連接由分號分隔的值。

2

您可以通過Javascript將事件添加到所需的HTML元素。這是最簡潔的方式,因爲它不會混合服務器的客戶端技術&。此外,通過這種方式,許多處理程序可以註冊到相同的事件(與onclick屬性相反)。

基本上,代碼將是

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

的Internet Explorer和

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

其他瀏覽器。 (doSomething是一個事件處理程序 - JavaScript函數)。這些呼叫應在窗口加載事件處理程序

考慮閱讀advanced event registration article on Quirksmode瞭解更多信息。

此外,請考慮使用庫如jQuery。這樣,聲明將變爲

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

修復語法或拼寫錯誤。

澄清含義而不改變它。

糾正小錯誤。

添加相關資源或鏈接。

始終尊重原作者。

相關問題