日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

數(shù)據(jù)驗(yàn)證(模擬檢測(cè)用戶(hù)名是否存在)

系統(tǒng) 2454 0
? ??? 數(shù)據(jù)驗(yàn)證涉及到很多方面的東西,在當(dāng)前的技術(shù)領(lǐng)域里,從技術(shù)上來(lái)看可以說(shuō)是分為傳統(tǒng)的驗(yàn)證(同步方式)和Ajax(異步方式)驗(yàn)證。如果從功能驗(yàn)證上來(lái)看的話(huà)就包羅萬(wàn)象了。比如非空驗(yàn)證,對(duì)等驗(yàn)證,格式驗(yàn)證等等。在.NET里還有專(zhuān)門(mén)用于驗(yàn)證的的幾個(gè)常見(jiàn)驗(yàn)證控件, RequiredFieldValidator , RangeValidator RegularExpressionValidator CompareValidator , CustomValidator以及 ValidationSummary等,這里不討論他們的使用及原理 。

一. 傳統(tǒng)的驗(yàn)證方式
???? 在傳統(tǒng)的驗(yàn)證中是采用同步表單提交的方法來(lái)處理的驗(yàn)證請(qǐng)求。這種驗(yàn)證方式的缺點(diǎn)很顯然而知了。表單提交一是傳輸?shù)臄?shù)據(jù)量比較大消耗資源,二是頁(yè)面處于同步方式隨著表單的提交會(huì)刷新頁(yè)面。下面我看來(lái)看看一個(gè)簡(jiǎn)單的傳統(tǒng)驗(yàn)證的實(shí)例:
??? 建議一個(gè)ASP.NET項(xiàng)目,將默認(rèn)頁(yè)面改名為: TraditValidation.aspx ,在頁(yè)面.cs里定義一個(gè)模擬數(shù)據(jù)的方法如下:
?1 /// ? <summary>
?2 /// ?模擬一個(gè)數(shù)據(jù)字典.判斷用戶(hù)名是否存在
?3 /// ? </summary>
?4 /// ? <param?name="strUsername"></param>
?5 /// ? <returns></returns>

?6 private ? bool ?IsUsernameExist( string ?strUsername)
?7 {
?8 ??? bool ?bRet? = ? false ;
?9
10 ??? switch ?(strUsername.ToLower())
11 ??? {
12 ?????? case ? " beniao " :
13 ?????? case ? " java " :
14 ?????? case ? " admin " :
15 ?????? case ? " ajax " :
16 ?????? case ? " aspnet " :
17 ??????bRet? = ? true ;? break ;
18 ????}

19 ???? return ?bRet;
20 }
???? 接下來(lái)轉(zhuǎn)到 TraditValidation.aspx的html視圖下,定義一個(gè)JavaScript方法來(lái)驗(yàn)證輸入數(shù)據(jù)的合法性。
< script?language = " javascript " >
function ?checkFrm()
{
?????
var ?tbUsername? = ?document.getElementById( " tbUsername " );
?????
var ?msg? = ?document.getElementById( " lblMessage " );
?????
var ?re? = ? / ^(\w{3,15})$ / gim;
?????
if ?(re.test(tbUsername.value))
?????
{
?????????
return ? true ;
?????}

?????
else
?????
{
?????????msg.innerHTML?
= ? " 長(zhǎng)度必須在3到15之間,且不包含字母、數(shù)字和下劃線(xiàn)以外的字符! " ;
????msg.style.color?
= ? " red " ;
????
return ? false ;
?????}

}

< / script>

??? 轉(zhuǎn)到設(shè)計(jì)視圖,給頁(yè)面上放置兩個(gè)Lebal,一個(gè)TextBox,一個(gè)Button控件并適當(dāng)?shù)脑O(shè)置屬性,html代碼如下:
< form? id ="Form1" ?method ="post" ?runat ="server" ?onsubmit ="return?checkFrm()" >
< asp:Label? id ="Label2" ?runat ="server" ?Font-Names ="黑體" ?Font-Bold ="True" ?Font-Size ="X-Large" > 傳統(tǒng)的數(shù)據(jù)驗(yàn)證 </ asp:Label >
< hr >
< div > 用戶(hù)名: </ div >
< asp:textbox? id ="tbUsername" ?runat ="server" ></ asp:textbox >
< asp:button? id ="btnVerify" ?runat ="server" ?Text ="檢查用戶(hù)名" ?OnClick ="btnVerify_Click" ></ asp:button >
< br >
< asp:label? id ="lblMessage" ?runat ="server" ?ForeColor ="Tomato" ></ asp:label >
</ form >
??? 下面轉(zhuǎn)到代碼視圖下去寫(xiě)btnVerify的單擊事件方法:
?1 protected ? void ?btnVerify_Click( object ?sender,?EventArgs?e)
?2 {
?3 ???? if ?(IsUsernameExist(tbUsername.Text))
?4 ???? {
?5 ????????lblMessage.Text? = ? " 用戶(hù)名存在! " ;
?6 ????????lblMessage.ForeColor? = ?Color.Green;
?7 ????}

?8 ???? else
?9 ???? {
10 ????????lblMessage.Text? = ? " 用戶(hù)名不存在! " ;
11 ????????lblMessage.ForeColor? = ?Color.Red;
12 ????}

13 }

???? 運(yùn)行這個(gè)程序頁(yè)面,當(dāng)我門(mén)點(diǎn)擊按扭的時(shí)候,提交表單并且頁(yè)面刷新。下面是運(yùn)行后的界面圖:
數(shù)據(jù)驗(yàn)證(模擬檢測(cè)用戶(hù)名是否存在)
-----------------------------------------------------------------------------------------------------------
二. Ajax驗(yàn)證方式
??? 上面的實(shí)例展示了傳統(tǒng)的驗(yàn)證方式的過(guò)程,原理是用的表單提交同步的方法執(zhí)行的。下面我們來(lái)看看Ajax的驗(yàn)證方式與傳統(tǒng)的驗(yàn)證方式有什么不同,在 上一篇文章 中講到XmlHttpRequest對(duì)象的異步請(qǐng)求實(shí)現(xiàn)Ajax功能。接下來(lái)還是通過(guò)一個(gè)使用XmlHttpRequest對(duì)象的實(shí)例來(lái)說(shuō)明Ajax驗(yàn)證方法的過(guò)程。

????在上面建立的ASP.NET項(xiàng)目里新建立一個(gè)一般處理程序文件,命名為:AjaxHandler.ashx,同上在里面定義一個(gè)模擬數(shù)據(jù)字典的方法用來(lái)檢測(cè)用戶(hù)名是否存在IsUsernameExist(string strUsername)和一個(gè)驗(yàn)證數(shù)據(jù)合法性的方法IsValidUsername(string strUsername);詳細(xì)定義如下:

??? IsUsernameExist()方法的詳細(xì)定義:
?1 /// ? <summary>
?2 ???? /// ?模擬一個(gè)數(shù)據(jù)字典.判斷用戶(hù)名是否存在
?3 ???? /// ? </summary>
?4 ???? /// ? <param?name="strUsername"></param>
?5 ???? /// ? <returns></returns>

?6 ???? private ? bool ?IsUsernameExist( string ?strUsername)
?7 ???? {
?8 ???????? bool ?bRet? = ? false ;
?9 ???????? // 在實(shí)際的項(xiàng)目應(yīng)用中下面就可以去執(zhí)行數(shù)據(jù)庫(kù)查詢(xún)進(jìn)行驗(yàn)證
10 ???????? switch ?(strUsername.ToLower())
11 ???????? {
12 ???????????? case ? " beniao " :
13 ???????????? case ? " java " :
14 ???????????? case ? " admin " :
15 ???????????? case ? " ajax " :
16 ???????????? case ? " aspnet " :
17 ????????????????bRet? = ? true ;? break ;
18 ????????}

19 ???????? return ?bRet;
20 ????}

???? IsValidUsername()方法的詳細(xì)定義:
1 /// ? <summary>
2 ???? /// ?驗(yàn)證字符串是否是3-15位
3 ???? /// ? </summary>
4 ???? /// ? <param?name="strUsername"></param>
5 ???? /// ? <returns></returns>

6 ???? private ? bool ?IsValidUsername( string ?strUsername)
7 ???? {
8 ???????? return ?(System.Text.RegularExpressions.Regex.IsMatch(strUsername,? @" ^(\w{3,15})$ " ));
9 ????}

?????? 見(jiàn)于Ajax的運(yùn)行步驟:創(chuàng)建對(duì)象---發(fā)送請(qǐng)求---響應(yīng)請(qǐng)求---處理返回?cái)?shù)據(jù)。
????? 下面我們來(lái)看看客戶(hù)端JavaScript方法的定義,第一篇文章里我提過(guò),要使用一個(gè)對(duì)象事先得創(chuàng)建一個(gè)對(duì)象的實(shí)例吧,在這里又將使用到XmlHttpRequest對(duì)象,所以我門(mén)先來(lái)定義一個(gè)方法創(chuàng)建XmlHttpRequest對(duì)象:
?1 ???? var ?xmlHttp;
?2 ???? function ?createXMLHttpRequest()
?3 ???? {
?4 ???????? if (window.ActiveXObject)
?5 ???????? {
?6 ????????????xmlHttp? = ? new ?ActiveXObject( " Microsoft.XMLHTTP " );
?7 ????????}

?8 ???????? else ? if (window.XMLHttpRequest)
?9 ???????? {
10 ????????????xmlHttp? = ? new ?XMLHttpRequest();
11 ????????}

12 ????}

?????? 定義一個(gè)向服務(wù)器發(fā)送請(qǐng)求的方法;
?1 ???? // 處理方法
?2 ???? function ?CheckUsername()
?3 ???? {
?4 ????????createXMLHttpRequest();
?5 ???????? var ?strName = document.getElementById( " tbUsername " ).value;
?6 ???????? var ?url = ? " AjaxHandler.ashx?strUsername= " + strName;
?7 ????????xmlHttp.open( " GET " ,url, true );
?8 ????????xmlHttp.onreadystatechange = ShowResult;
?9 ????????xmlHttp.send( null );
10 ????}
?????
?????? 到這里通過(guò)分析上面的方法,已經(jīng)創(chuàng)建好了XmlHttpRequest對(duì),并定義好了向服務(wù)器發(fā)送請(qǐng)求的方法,指定了想AjaxHandler.ashax發(fā)起請(qǐng)求并傳遞一個(gè)參數(shù)給服務(wù)器端。那服務(wù)器是怎么處理這個(gè)請(qǐng)求的呢?下面我們來(lái)看看服務(wù)器端的處理過(guò)程的定義,在一般處理程序里,當(dāng)請(qǐng)求發(fā)送給他過(guò)后是通過(guò)其內(nèi)的一個(gè)叫 ProcessRequest ()?的方法來(lái)處理的,那么在這里我門(mén)要處理客戶(hù)端發(fā)送過(guò)來(lái)的請(qǐng)求,是不是就應(yīng)該修改ProcessRequest()方法的實(shí)現(xiàn)呢?答案是肯定的,如下:
?1 ???? public ? void ?ProcessRequest?(HttpContext?context)?
?2 ???? {
?3 ????????context.Response.ContentType? = ? " text/plain " ;
?4 ???????? string ?flag? = ? string .Empty;
?5 ???????? string ?strUsername? = ?context.Request.QueryString[ 0 ];
?6 ???????? if ?( ! IsValidUsername(strUsername))
?7 ???????? {
?8 ????????????flag? = ?? " 1 " ;
?9 ????????}

10 ???????? else ? if ?( ! IsUsernameExist(strUsername))
11 ???????? {
12 ????????????flag? = ? " 2 " ;
13 ????????}

14 ???????? else
15 ???????? {
16 ????????????flag? = ? " 0 " ;
17 ????????}

18 ????????context.Response.Write(flag);
19 ????}

?????? 分析上面代碼,如果用戶(hù)名不合法則返回1,如果存在則返回2,否則返回0,那么客戶(hù)端的處理返回該怎么去定義呢?很顯然是依賴(lài)于服務(wù)器端返回的這些數(shù)據(jù)了??蛻?hù)端回調(diào)方法的詳細(xì)定義如下:
?1 // 回調(diào)方法
?2 function?ShowResult()
?3 {
?4 ??? if (xmlHttp.readyState == 4 )
?5 ??? {
?6 ??????? if (xmlHttp.status == 200 )
?7 ???????? {
?8 ???????????var?bRet? = ?xmlHttp.responseText;
?9 ??????? if ?(bRet? == ? " 0 " )
10 ??????? {
11 ??????????msg.innerHTML? = ? ' 用戶(hù)名存在! ' ;
12 ??????????msg.style.color? = ? ' green ' ;
13 ???????}

14 ??????? else ? if ?(bRet? == ? " 1 " )
15 ??????? {
16 ??????????msg.innerHTML? = ? ' 用戶(hù)名長(zhǎng)度必須在3到15之間,且不包含字母、數(shù)字和下劃線(xiàn)以外的字符! ' ;
17 ??????????????msg.style.color? = ? ' red ' ;
18 ???????}

19 ??????? else
20 ??????? {
21 ?????????msg.innerHTML? = ? ' 用戶(hù)名不存在! ' ;
22 ?????????msg.style.color? = ? ' red ' ;
23 ???????}
????????????
24 ???????}

25 ???}

26 }

????? 到這里客戶(hù)端方法和服務(wù)器處理程序都OK了,下面我門(mén)在客戶(hù)段來(lái)調(diào)用方法向服務(wù)器發(fā)送請(qǐng)求看看效果:
< form? id ="form1" ?runat ="server" >
????
< asp:Label? id ="Label2" ?runat ="server" ?Font-Names ="黑體,Arial?Black" ?Font-Bold ="True" ?Font-Size ="X-Large" >
???????基于AJAX的數(shù)據(jù)驗(yàn)證
</ asp:Label >
????
< hr >
????
< asp:Label? id ="Label1" ?runat ="server" > 用戶(hù)名: </ asp:Label >
????
< input? id ="tbUsername" ?type ="text" ?onkeyup ="CheckUsername(this.value)" />
????
< br >

????
< div? id ="msg" ></ div >
????
</ form >

?????? 運(yùn)行結(jié)果如下所示:
數(shù)據(jù)驗(yàn)證(模擬檢測(cè)用戶(hù)名是否存在)

本文實(shí)例源代碼下載
????

數(shù)據(jù)驗(yàn)證(模擬檢測(cè)用戶(hù)名是否存在)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 扎囊县| 宿州市| 呈贡县| 城市| 聊城市| 梓潼县| 阳城县| 独山县| 黄骅市| 十堰市| 毕节市| 镇康县| 巴塘县| 娄烦县| 门头沟区| 台前县| 衡东县| 淅川县| 修武县| 穆棱市| 于田县| 罗平县| 富裕县| 敦煌市| 锦屏县| 钟祥市| 洪洞县| 蒲江县| 衡东县| 易门县| 吴旗县| 扶余县| 治县。| 治多县| 莒南县| 大关县| 青神县| 山阳县| 修文县| 罗甸县| 子长县|