我們寫(xiě)一個(gè)檢測(cè)用戶(hù)是否已經(jīng)注冊(cè)的小程序,這在每個(gè)用戶(hù)注冊(cè)頁(yè)面上都可以用到。
前臺(tái)Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableViewState="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<html xmlns="<head runat="server"> <title>ICallbackEventHandler Demo</title> <style type="text/css"> *{font: 12px "verdana";} #user{border:1px solid #080; height:50px;width:500px;padding:20px;} input{border:1px solid #508FCC;background:#FFF;} .ok{color:#090;} .bad{color:#F00} #result{display:inline;margin: 0 5px 0;} </style> <script type="text/javascript"> function GetFlag(arg)//這里的javascript函數(shù)就是服務(wù)器查詢(xún)完成要調(diào)用的函數(shù),我們把服務(wù)器返回的數(shù)據(jù)直接顯示上ID為result的div中。 { document.getElementById("result").innerHTML=arg; } </script> </head> <body> <form id="form1" runat="server"> <div id="user"> <input type="text" value="99love" maxlength="10" id="userid" /> <input type="button" value="check it!" onclick="callServer()" /><div id="result">查詢(xún)用戶(hù)是否被使用。</div> </div> </form> </body> </html>
上面有一個(gè)<input type="button" value="check it!" onclick="callServer()" />,這是我說(shuō)的第5步的內(nèi)容,這個(gè)函數(shù)名字callServer應(yīng)該和Lage_Load中注冊(cè)的相對(duì)應(yīng)的。
后臺(tái)Default.aspx.cs:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class _Default : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler { private string _arg = string.Empty; protected void Page_Load(object sender, EventArgs e) { string script = Page.ClientScript.GetCallbackEventReference(this, "arg", "GetFlag", "");//上面的第3步,取得這個(gè)客戶(hù)端函數(shù)名,script的值可能是這樣的:WebForm_DoCallback('__Page',arg,GetFlag,\"\",null,false) Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "callServer", "\nfunction callServer(){\ndocument.getElementById(\"result\").innerHTML=\"正在檢查 \"+document.getElementById(\"userid\").value+\" 的可用性,請(qǐng)稍候...\";\nvar arg=document.getElementById(\"userid\").value;\n" + script + ";\n}", true); //上面這一行有點(diǎn)長(zhǎng)了,第二個(gè)參數(shù)最長(zhǎng),看到function callServer()了嗎,這就是和前臺(tái)對(duì)應(yīng)的那個(gè)函數(shù)名<input onclick=XXX,請(qǐng)記得,一定要在callServer函數(shù)中加入script的值,也就是上一行的上一行(17行)那個(gè)值。注意后面的var arg=...,這個(gè)arg和17行的arg是對(duì)應(yīng)的。 } #region ICallbackEventHandler Members public string GetCallbackResult() { System.Threading.Thread.Sleep(1000);//讓線(xiàn)程睡一會(huì),我們好看效果。這是用來(lái)模擬不良網(wǎng)絡(luò)狀況的。 return _arg;//返回一個(gè)string型,這個(gè)string在RaiseCallbackEvent函數(shù)中是賦過(guò)值的,看下面哦。 } public void RaiseCallbackEvent(string eventArgument) { if (eventArgument.Equals("99love") || eventArgument.Equals("blueidea"))//假設(shè)這兩個(gè)名字不能注冊(cè),實(shí)際操作中,你要是比對(duì)數(shù)據(jù)庫(kù)記錄的,我們現(xiàn)在簡(jiǎn)化處理了。 _arg = string.Format("<span class=\"bad\">很遺憾,{0} 已被使用。</span>", eventArgument);//要么已經(jīng)注冊(cè)了 else _arg = string.Format("<span class=\"ok\">恭喜您,{0} 可以注冊(cè)。</span>", eventArgument);//要么就可以注冊(cè) } #endregion }
運(yùn)行截圖:
源碼下載
希望這篇文章能在某些時(shí)候?qū)δ兴鶐椭?/p>
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2826315-1-1.html
本文鏈接:http://www.95time.cn/tech/program/2008/5300.asp
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁(yè) 不用組件實(shí)現(xiàn)Ajax效果 [1] 下一頁(yè)
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|