天天看點

讓伺服器端控件同時執行用戶端腳本和伺服器端代碼

讓伺服器控件的事件同時執行用戶端腳本和伺服器端代碼

    問題:

        有時候我們需要一個伺服器控件同時執行用戶端腳本(如javascript)和伺服器端代碼。比如在進行表單驗證的時候,希望先在用戶端進行驗證,隻有通過驗證才執行背景代碼。這樣可以避免不必要的postback,提供更好的使用者體驗。

    解決方案:

        在不同的地方分别注冊用戶端和伺服器端事件處理函數。示例如下:

    Web頁面代碼(僅HTML部分):

    <HTML>

        <HEAD>

            <title>DoubleSidesHandler</title>

            <script language="javascript">

                function submitClientHandler()

                {

                    var len = document.form1.txtName.value.length;

                    if(len < 3)

                    {

                        window.alert("required at least 3 letters!");

                        return false;

                    }

                    window.alert(document.form1.txtName.value);

                    return true;

                }

                function initHandler()

                    var elem = document.form1.btnSubmit;

                    if(elem)

                        elem.onclick = submitClientHandler;

            </script>

        </HEAD>

        <body onload="initHandler()">

            <form id="form1" method="post" runat="server">

                Enter your name:

                <asp:TextBox ID="txtName" Width="200px" Runat="server"></asp:TextBox>

                <br>

                <asp:Button ID="btnSubmit" Text="Submit" Runat="server" OnClick="SubmitServerHandler"></asp:Button>

            </form>

        </body>

    </HTML>

     背景代碼(僅事件處理函數):

     protected void SubmitServerHandler(object sender, System.EventArgs e)

     {

        Response.Write("hello!" + txtName.Text + "<br>");

     }

     分析:

     這裡用戶端和伺服器端的事件處理函數分别是submitClientHandler()和SubmitServerHandler()。submitClientHandler()在頁面加載完成時(onload事件中)注冊,這時才能獲得對伺服器控件的引用。SubmitServerHandler()在Button控件的OnClick屬性中注冊,這裡注意該方法須聲明為protected以上級别,這樣才能在頁面中通路。完成這兩步注冊後,頁面會先後執行用戶端和伺服器端時間處理函數。

     那麼,怎麼才能控制對伺服器端代碼的調用?看submitClientHandler()函數,如果傳回false,那麼就不執行SubmitServerHandler(),如果傳回true,就會繼續調用SubmitServerHandler()。

本文轉自一個程式員的自省部落格園部落格,原文連結:http://www.cnblogs.com/anderslly/archive/2006/09/30/doublesidesevent.html,如需轉載請自行聯系原作者。

繼續閱讀