Asp.net2005不用Ajax實(shí)現(xiàn)無刷新驗(yàn)證用戶名、密
系統(tǒng)
2759 0
Asp.net2005不用Ajax實(shí)現(xiàn)無刷新驗(yàn)證用戶名、密碼和中文驗(yàn)證碼
主要功能:無刷新實(shí)現(xiàn)對(duì)用戶名,密碼,中文驗(yàn)證碼的驗(yàn)證!
技術(shù)要點(diǎn):使用.NEt2005中新接口“ICallbackEventHandler”用asp.net動(dòng)態(tài)生成中文驗(yàn)證碼
話不多說,直接看代碼,
只要有兩個(gè)頁面 Login.aspx 和
ImageR
.aspx
Login.aspx 的代碼如下:
<%
@PageLanguage
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Login.aspx.cs
"
Inherits
=
"
Login
"
%>
<!
DOCTYPEhtmlPUBLIC
"
-//W3C//DTDXHTML1.0Transitional//EN
"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"
>
<
htmlxmlns
=
"
http://www.w3.org/1999/xhtml
"
>
<
headrunat
=
"
server
"
>
<
title
>
Login
</
title
>
<
scriptlanguage
=
"
javascript
"
type
=
"
text/javascript
"
>
vardiv;
functioncallback()
...
{
varname
=
document.getElementById(
"
UserName
"
).value;
varpass
=
document.getElementById(
"
PassWord
"
).value;
varcheckcode
=
document.getElementById(
"
CheckCode
"
).value;
div
=
document.getElementById(
"
show_msg
"
);
div.innerHTML
=
"
<imgsrc=img/loading.gif>
"
+
'
正在加載,請(qǐng)稍后.....
'
;
div.style.backgroundColor
=
"
AliceBlue
"
;
dos(name
+
"
&
"
+
pass
+
"
&
"
+
checkcode);
}
functionReceiveServerData(text)
...
{
alert(text);
div.style.display
=
"
none
"
;
location.href
=
location.href;
}
functionover(o)
...
{
o.style.borderColor
=
"
#9ECC00
"
;
}
function
out
(o)
...
{
o.style.borderColor
=
"
#A9BAC9
"
;
}
</
script
>
</
head
>
<
body
>
<
formid
=
"
form1
"
runat
=
"
server
"
>
<
div
>
<
tablestyle
=
"
width:218px;height:96px;
"
>
<
tr
>
<
tdstyle
=
"
width:35px
"
>
<
asp:LabelID
=
"
Label1
"
runat
=
"
server
"
Text
=
"
UserName
"
></
asp:Label
></
td
>
<
tdstyle
=
"
width:205px
"
>
<
inputid
=
"
UserName
"
type
=
"
text
"
style
=
"
border-style:groove;border-color:#A9BAC9;width:148px
"
onmouseout
=
"
out(this)
"
onmouseover
=
"
over(this)
"
/></
td
>
</
tr
>
<
tr
>
<
tdstyle
=
"
width:35px;height:12px;
"
>
<
asp:LabelID
=
"
Label2
"
runat
=
"
server
"
Text
=
"
PassWord
"
Width
=
"
44px
"
></
asp:Label
></
td
>
<
tdstyle
=
"
width:205px;height:12px;
"
>
<
inputid
=
"
PassWord
"
type
=
"
password
"
style
=
"
border-style:groove;border-color:#A9BAC9;width:148px
"
onmouseout
=
"
out(this)
"
onmouseover
=
"
over(this)
"
/></
td
>
</
tr
>
<
tr
>
<
td
>
<
asp:ImageID
=
"
Image1
"
runat
=
"
server
"
ImageUrl
=
"
ImageR.aspx
"
/></
td
>
<
tdstyle
=
"
height:13px;width:205px;
"
>
<
inputid
=
"
CheckCode
"
style
=
"
border-style:groove;border-color:#A9BAC9;width:55px
"
onmouseout
=
"
out(this)
"
onmouseover
=
"
over(this)
"
type
=
"
text
"
maxlength
=
"
4
"
/></
td
>
</
tr
>
<
tr
>
<
tdstyle
=
"
height:26px
"
>
</
td
>
<
tdstyle
=
"
width:205px;height:26px
"
>
<
inputid
=
"
Login
"
type
=
"
button
"
value
=
"
登 陸
"
onclick
=
"
callback()
"
style
=
"
width:60px
"
/>
</
td
>
</
tr
>
<
tr
>
<
tdstyle
=
"
width:35px;
"
>
</
td
>
<
tdstyle
=
"
width:205px;
"
>
<
divid
=
"
show_msg
"
></
div
>
</
td
>
</
tr
>
</
table
>
</
div
>
</
form
>
</
body
>
</
html
>
Login.aspx.cs 的代碼如下:這個(gè)頁面實(shí)現(xiàn)自 ICallbackEventHandler 接口
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
Login:System.Web.UI.Page,ICallbackEventHandler
...
{
private
string
result;
protected
void
Page_Load(
object
sender,EventArgse)
...
{
if
(
!
Page.IsPostBack)
...
{
string
cbReference
=
Page.ClientScript.GetCallbackEventReference(
this
,
"
text
"
,
"
ReceiveServerData
"
,
""
);
//
獲取一個(gè)對(duì)客戶端函數(shù)的引用;調(diào)用該函數(shù)時(shí),將啟動(dòng)一個(gè)對(duì)服務(wù)器端事件的客戶端回調(diào)。
string
callbackScript
=
"
functiondos(text){
"
+
cbReference
+
"
;}
"
;
//
注冊(cè)客戶端方法
Page.ClientScript.RegisterClientScriptBlock(
this
.GetType(),
"
dos
"
,callbackScript,
true
);
//
向客戶端寫入腳本塊
}
}
/**/
///
<summary>
///
處理回調(diào)事件。
///
</summary>
///
<paramname="text"></param>
public
void
RaiseCallbackEvent(
string
text)
...
{
string
checkcode
=
(
string
)Session[
"
Code
"
];
string
[]j
=
text.Split(
new
char
[]
...
{
'
&
'
}
,
3
);
if
(j[
2
]
!=
checkcode)
result
=
"
驗(yàn)證碼錯(cuò)誤!請(qǐng)重新輸入
"
;
else
if
(j[
0
]
==
"
1111
"
&&
j[
1
]
==
"
2222
"
)
result
=
"
登陸成功!
"
;
else
result
=
"
登陸失??!
"
;
}
/**/
///
<summary>
///
返回回調(diào)事件的結(jié)果。
///
</summary>
///
<returns></returns>
public
string
GetCallbackResult()
...
{
return
result;
}
}
ImageR
.aspx 頁面無內(nèi)容,主要在
ImageR
.aspx.cs里 代碼如下:
using
System;
using
System.Drawing;
using
System.Drawing.Imaging;
using
System.Drawing.Drawing2D;
public
partial
class ImageR
:System.Web.UI.Page
...
{
protected
void
Page_Load(
object
sender,EventArgse)
...
{
CreateCheckCodeImage(GenCode(
4
));
}
/**/
///
<summary>
///
'產(chǎn)生隨機(jī)字符串
///
</summary>
///
<paramname="num">
隨機(jī)出幾個(gè)字符
</param>
///
<returns>
隨機(jī)出的字符串
</returns>
private
string
GenCode(
int
num)
...
{
string
str
=
"
的一是在不了有和人這中大為上個(gè)國(guó)我以要他時(shí)來用們生到作地于出就分對(duì)成會(huì)可主發(fā)年動(dòng)同工也能下過子說產(chǎn)種面而方后多定行學(xué)法所民得經(jīng)十三之進(jìn)著等部度家電力里如水化高自二理起小物現(xiàn)實(shí)加量都兩體制機(jī)當(dāng)使點(diǎn)從業(yè)本去把性好應(yīng)開它合還因由其些然前外天政四日那社義事平形相全表間樣與關(guān)各重新線內(nèi)數(shù)正心反你明看原又么利比或但質(zhì)氣第向道命此變條只沒結(jié)解問意建月公無系軍很情者最立代想已通并提直題黨程展五果料象員革位入常文總次品式活設(shè)及管特件長(zhǎng)求老頭基資邊流路級(jí)少圖山統(tǒng)接知較將組見計(jì)別她手角期根論運(yùn)農(nóng)指幾九區(qū)強(qiáng)放決西被干做必戰(zhàn)先回則任取據(jù)處隊(duì)南給色光門即保治北造百規(guī)熱領(lǐng)七??跂|導(dǎo)器壓志世金增爭(zhēng)濟(jì)階油思術(shù)極交受聯(lián)什認(rèn)六共權(quán)收證改清己美再采轉(zhuǎn)更單風(fēng)切打白教速花帶安場(chǎng)身車?yán)鎰?wù)具萬每目至達(dá)走積示議聲報(bào)斗完類八離華名確才科張信馬節(jié)話米整空元況今集溫傳土許步群廣石記需段研界拉林律叫且究觀越織裝影算低持音眾書布復(fù)容兒須際商非驗(yàn)連斷深難近礦千周委素技備半辦青省列習(xí)響約支般史感勞便團(tuán)往酸歷市克何除消構(gòu)府稱太準(zhǔn)精值號(hào)率族維劃選標(biāo)寫存候毛親快效斯院查江型眼王按格養(yǎng)易置派層片始卻專狀育廠京識(shí)適屬圓包火住調(diào)滿縣局照參紅細(xì)引聽該鐵價(jià)嚴(yán)
"
;
char
[]chastr
=
str.ToCharArray();
//
string[]source={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","#","$","%","&","@"};
string
code
=
""
;
Randomrd
=
new
Random();
int
i;
for
(i
=
0
;i
<
num;i
++
)
...
{
//
code+=source[rd.Next(0,source.Length)];
code
+=
str.Substring(rd.Next(
0
,str.Length),
1
);
}
return
code;
}
/**/
///
<summary>
///
生成圖片(增加背景噪音線、前景噪音點(diǎn))
///
</summary>
///
<paramname="checkCode">
隨機(jī)出字符串
</param>
private
void
CreateCheckCodeImage(
string
checkCode)
...
{
if
(checkCode.Trim()
==
""
||
checkCode
==
null
)
return
;
Session[
"
Code
"
]
=
checkCode;
//
將字符串保存到Session中,以便需要時(shí)進(jìn)行驗(yàn)證
System.Drawing.Bitmapimage
=
new
System.Drawing.Bitmap((
int
)(checkCode.Length
*
21.5
),
22
);
Graphicsg
=
Graphics.FromImage(image);
try
...
{
//
生成隨機(jī)生成器
Randomrandom
=
new
Random();
//
清空?qǐng)D片背景色
g.Clear(Color.White);
//
畫圖片的背景噪音線
int
i;
for
(i
=
0
;i
<
25
;i
++
)
...
{
int
x1
=
random.Next(image.Width);
int
x2
=
random.Next(image.Width);
int
y1
=
random.Next(image.Height);
int
y2
=
random.Next(image.Height);
g.DrawLine(
new
Pen(Color.Silver),x1,y1,x2,y2);
}
Fontfont
=
new
System.Drawing.Font(
"
Arial
"
,
12
,(System.Drawing.FontStyle.Bold));
System.Drawing.Drawing2D.LinearGradientBrushbrush
=
new
System.Drawing.Drawing2D.LinearGradientBrush(
new
Rectangle(
0
,
0
,image.Width,image.Height),Color.Blue,Color.DarkRed,
1.2F
,
true
);
g.DrawString(checkCode,font,brush,
2
,
2
);
//
畫圖片的前景噪音點(diǎn)
g.DrawRectangle(
new
Pen(Color.Silver),
0
,
0
,image.Width
-
1
,image.Height
-
1
);
System.IO.MemoryStreamms
=
new
System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType
=
"
image/Gif
"
;
Response.BinaryWrite(ms.ToArray());
}
catch
...
{
g.Dispose();
image.Dispose();
}
}
}
保存直接運(yùn)行即可!
Asp.net2005不用Ajax實(shí)現(xiàn)無刷新驗(yàn)證用戶名、密碼和中文驗(yàn)證碼
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元