天天看點

【轉】ASP.NET的OnClientClick與OnClick事件【解決了“識别使用者在對話框裡面選yes或no的問題”】

OnClientClick是用戶端事件方法.一般采用JavaScript來進行處理.也就是直接在IE端運作.一點選就運作.

OnClick事件是伺服器端事件處理方法,在伺服器端,也就是IIS中運作.點選按鈕後,執行postback,再運作.

如果一個按鈕上我們同時有用戶端的OnClientClick方法又有OnClick事件處理方法,如何才能按照正常的邏輯運作呢?

OnClientClick中我們常用來做一些用戶端的檢測.當然放在伺服器也可以做同樣的檢測,但這樣做的代價是與伺服器進行互動,消耗資源。

例:

test()為一javascript函數.

t1為一文本框,判斷輸入内容是否為空

需要注意的是當我們當擊這個按鈕時,自動先執行的用戶端,再執行伺服器端的.如果用戶端傳回的是false,那麼伺服器端對應的方法永遠不會執行.這樣就達到檢測,隻有通過才去執行伺服器端的方法.

也就是說如果我們上面寫成:

那麼不管test()執行的結果如何.伺服器端對應的Button1_Click方法都永遠不會執行.因為return false使得始終使用戶端傳回false

如果我們寫成:

那麼Button1_Click都有會發生.同樣也就達不到效果.也就是說你沒有通過檢測也去執行伺服器的方法了.

另外:

我們還可以通過Button1.Attributes.Add("onclick", "test()");的方法來觸發用戶端事件。

以上來自:http://blog.163.com/huang_qy/blog/static/615601452012101535413943/

======================================================================================

OnClick與OnClientClick對于菜鳥的我來說真的花了一點時間去搞清楚。OnClientClick是在用戶端方面運作的。而OnClick是會postback在伺服器端運作的(這挺廢話的)。但這裡存在著執行時間和條件。時序性:網頁上點選一個button第一個先觸發的是用戶端的OnClientClick,然後才會執行OnClick。條件性:要在 OnClientClick傳回true的情況下,OnClick才會被後續執行。在網頁預設的情況下:OnClientClick執行函數後,如果函數沒有傳回值OnClientClick會傳回true,是以可以讓OnClick順利執行。但也存在着某些時候不讓OnClick執行的價值。例如使用 Javascript進行使用者的第一層驗證或基本的檢查工作。如果不符合條件就不觸發OnClick回到伺服器端繼續邏輯。

那麼在這種情況下就要人為的将OnClientClick的傳回弄成 false。做法很簡單。定義一個根據檢測條件傳回true或者false值的Javascript或vbscript函數。然後在 OnClientClient調用。方法是OnClientClick=“return fun(真是你定義的Javascript或vbscript函數);”這樣就可以達到符合條件才會觸發OnClick,不符合條件不觸發 OnClick。  

對于LinkButton我們做了一個實驗,測試成功了:

<script type="text/javascript">

    function delete_user( obj)

    {

      var r=confirm("确認删除此使用者?");

      return r;

     }

</script>

.......

<td><asp:LinkButton ID="LinkButtonDeleteUser" runat="server" CommandName="Order" CommandArgument='<%# Eval("UserName") %>' OnCommand="LinkButtonDeleteUser_Command"  OnClientClick="return delete_user(this);" >删除使用者</asp:LinkButton></td>

該操作是當使用者在頁面點解“删除使用者”的連結按鈕時,先彈出“确認删除此使用者?”的資訊框,如果使用者選擇的是确定時才執行删除使用者的操作。

 學習資料:

​​http://msdn.microsoft.com/zh-cn/library/dd410060​​

這裡詳細介紹了ASP.NET 提供的兩種方法如何用來實作用戶端功能。

​​http://www.w3school.com.cn/aspnet/aspnet_refwebcontrols.asp​​

這裡包括了ASP.NET中所有WEB伺服器控件的屬性和使用方法

相類似的問題的文章:

javascript:void(0)

伺服器控件妙用OnClientClick事件阻止回傳

很多時候,我們需要對伺服器控件的輸入内容進行驗證,如果在背景.cs頁面進行驗證,則會重新整理頁面,在使用者體驗和效率方面都不劃算,其實完全可能在用戶端使用javascript進行驗證,隻要編寫用戶端事件OnClientClick便可以了。OnClientClick會在OnClick事件之前觸發。如果OnclientClick事件函數傳回false,那麼控件不再回傳,即OnClick事件也不會再執行。見下例:

    <script type="text/javascript">

         function check() {

              var input = document.getElementById("text1").value;

              if(input == null || input == "")

              {

                     alert("文本框不能為空!");

                     return false;

              }

              return true;

         }

    </script>

    <div>

      <asp:TextBox ID="text1" runat="server"></asp:TextBox>

      <asp:Button ID="summitBtn" runat="server" Text="送出" OnClick="summitBtn_Click" OnClientClick="return check();" />

   </div>

    因為check()函數有傳回值,是以前面的return關鍵字不能漏掉。如果檢驗通過,即傳回true,則summitBtn_Click會繼續執行,可以在summitBtn_Click中對表單的資料進入資料庫操作。

繼續閱讀