1,網(wǎng)上關(guān)于ICallbackEventHandler的實(shí)現(xiàn)效果比較多,之所以繼續(xù)寫關(guān)于這個(gè)接口的使用有幾個(gè)原因:(1)時(shí)間長(zhǎng)了,容易忘記這個(gè)接口該怎么使用,肯定又要去搜索。(2)搜索出一堆別人的博客,看著別人寫的不舒坦,不爽,所以自己按自己的想法想怎么寫就怎么寫。(3)看到自己寫的博客,幾乎很容易就立馬想起來當(dāng)時(shí)怎么使用的,很快就知道怎么使用了。(4)還有個(gè)原因就是,最近項(xiàng)目不緊,也不知道學(xué)點(diǎn)啥,就隨便敲幾行字。
2,ICallbackEventHandler接口彌補(bǔ)了Ajax框架的不足!Ajax框架比較大,會(huì)在前臺(tái)生成很多的Js代碼。而ICallbackEventHandler接口卻沒有那么麻煩,他的邏輯,也就是前臺(tái)控件觸發(fā)(click,doubleclick,mouSEOver,blur,focus),不管哪種觸發(fā)方式,讓他指定執(zhí)行前臺(tái)的一個(gè)Js方法(該方法是在后臺(tái)Page_load使用RegisterClientScriptBlock()方法注冊(cè)到前臺(tái))。然后這個(gè)Js方法會(huì)執(zhí)行后臺(tái)的一個(gè)方法,后臺(tái)根據(jù)參數(shù)經(jīng)過業(yè)務(wù)處理,將處理結(jié)果賦值給一個(gè)屬性,然后后臺(tái)回調(diào)方法中將這個(gè)屬性的值返回,頁面前臺(tái)早已注冊(cè)好的方法便會(huì)根據(jù)這個(gè)返回值進(jìn)行相關(guān)處理。
3,根據(jù)這個(gè)邏輯,我寫了一個(gè)小的Demo,根據(jù)用戶輸入的手機(jī)號(hào),判斷當(dāng)前手機(jī)號(hào)是否已經(jīng)注冊(cè)。
(1),前臺(tái)HTML代碼
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title> <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> <script type="text/Javascript"> function receiveServerDataNew(returnVal) { $("#warn").html(returnVal); } $(function () { $("input[id*='TB_MobilePhone']").blur(function () { var mobilePhone = $("input[id*='TB_MobilePhone']").val(); callServerEvent(mobilePhone, ""); }); }) </script></head><body> <form id="form1" runat="server"> <div> 姓 名:<asp:TextBox ID="TB_UserName" runat="server"></asp:TextBox><br /> 密 碼:<asp:TextBox ID="TB_HiddenCode" runat="server"></asp:TextBox><br /> 手機(jī)號(hào):<asp:TextBox ID="TB_MobilePhone" runat="server"></asp:TextBox><span id="warn" style=" color:Red";></span> </div> </form></body></html>
(2),后臺(tái)代碼
public partial class _Default : System.Web.UI.Page,ICallbackEventHandler { PRotected void Page_Load(object sender, EventArgs e) { //獲取一個(gè)對(duì)客戶端函數(shù)的引用;調(diào)用該函數(shù)時(shí),將啟動(dòng)一個(gè)對(duì)服務(wù)器端事件的客戶端回調(diào)。此重載方法的客戶端函數(shù)包含指定的控件、參數(shù)、客戶端腳本和上下文 String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "receiveServerDataNew", "context"); String callbackScript = "function callServerEvent(arg, context)" + "{ " + cbReference + ";}"; //往前臺(tái)注冊(cè)腳本 Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "callServer", callbackScript, true); } private string _CallBackResult = ""; public string GetCallbackResult() { return _CallBackResult; } public void RaiseCallbackEvent(string eventArgument) { if (eventArgument=="") { _CallBackResult = "手機(jī)號(hào)不能為空"; } //自己查數(shù)據(jù)庫去吧 if (eventArgument=="18866668888") { _CallBackResult = "當(dāng)前手機(jī)號(hào)已經(jīng)注冊(cè)"; } } }4,頁面一加載,首先執(zhí)行后臺(tái)的Page_Load事件,然后callServerEvent這個(gè)方法就注冊(cè)到前臺(tái)了,前臺(tái)頁面一生成,便給手機(jī)號(hào)那個(gè)文本框注冊(cè)了,失去焦點(diǎn)事件,失去焦點(diǎn)的事件里面執(zhí)行callServerEvent()方法(傳入倆個(gè)參數(shù)),調(diào)用后臺(tái)的RaiseCallbackEvent(string eventArgument)方法,該方法經(jīng)過業(yè)務(wù)邏輯處理,賦值給_CallBackResult屬性,GetCallbackResult()方法將處理結(jié)果返回,同時(shí)調(diào)用前臺(tái)方法receiveServerDataNew(),該方法便根據(jù)后臺(tái)的處理結(jié)果,進(jìn)行頁面處理。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注