2008-10-15 53 views
0

我有一個asp.net服務器控件(在其定義中使用asp:)。該按鈕已設置爲回發。Asp.net服務器控件在服務器端/客戶端的相同事件處理順序

在服務器端,我有上單擊事件處理 如btnSave_click()

在客戶端,我有一個JavaScript函數上的click事件 如btnSave.Attributes.Add(被調用「onclick」,「javascript:return CheckIsDirty();」)

我不確定這兩個命令的執行順序。因爲我希望客戶端首先在實際保存任何數據之前警告尚未填寫的任何數據輸入字段。

任何幫助?

回答

2

第一個客戶端,第二個服務器端。

所以你可以使用它。

我還用它在某些情況下,如:

close.Attributes["OnClick"] = "return confirm('Are you sure?')"; 

在這種情況下,如果用戶按下「否​​」,那麼服務器端事件處理程序甚至不發揮作用。

+0

謝謝,現在適合我... – 2008-10-15 12:37:16

0

我認爲您需要更好地理解客戶端意味着什麼,服務器端意味着什麼以及它們如何關聯在一起。我看到越來越多的開發人員把它弄得一團糟。

當然,客戶端將首先執行您的情況。事實上,在服務器代碼執行後無法執行它(除非手動執行)。我會盡量給出一個簡單的解釋:

無論你在服務器上有什麼,都會在客戶端生成一些HTML,並且用戶總是在客戶端進行交互。所以你有一個用戶點擊的html按鈕。瀏覽器會做什麼是執行與它相關的JavaScript,或者如果沒有指定javascript,並且按鈕是提交按鈕,它將提交表單。如果您檢查生成的html,您將看到onclick事件,您將擁有添加的腳本,然後是一些實際將提交表單到服務器的自動生成的腳本。您的服務器端代碼只有在頁面被提交時纔會執行。

1

您設置onClick JavaScript事件的方式實際上會阻止它在您覆蓋ASP.NET事件處理程序時被回發。實現您打算驗證正確的方法是:

btnSave.Attributes.Add("onclick", "CheckIsDirty();" + GetPostBackEventReference(btnSave).ToString()); 

請注意,您追加GetPostBackEventReference的結果,所以在JavaScript中你第一次打電話給你CheckIsDirty()方法,然後調用ASP.NET回發方法。假設你的方法返回true,那麼該按鈕將發佈。如果它返回false,那麼它不會導致回發。

這聽起來像你想要完成的?

相關問題