Asp.net2005不用Ajax實現無刷新驗證用戶名、密
系統
2191 0
Asp.net2005不用Ajax實現無刷新驗證用戶名、密碼和中文驗證碼
主要功能:無刷新實現對用戶名,密碼,中文驗證碼的驗證!
技術要點:使用.NEt2005中新接口“ICallbackEventHandler”用asp.net動態生成中文驗證碼
話不多說,直接看代碼,
只要有兩個頁面 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>
"
+
'
正在加載,請稍后.....
'
;
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 的代碼如下:這個頁面實現自 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
"
,
""
);
//
獲取一個對客戶端函數的引用;調用該函數時,將啟動一個對服務器端事件的客戶端回調。
string
callbackScript
=
"
functiondos(text){
"
+
cbReference
+
"
;}
"
;
//
注冊客戶端方法
Page.ClientScript.RegisterClientScriptBlock(
this
.GetType(),
"
dos
"
,callbackScript,
true
);
//
向客戶端寫入腳本塊
}
}
/**/
///
<summary>
///
處理回調事件。
///
</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
=
"
驗證碼錯誤!請重新輸入
"
;
else
if
(j[
0
]
==
"
1111
"
&&
j[
1
]
==
"
2222
"
)
result
=
"
登陸成功!
"
;
else
result
=
"
登陸失敗!
"
;
}
/**/
///
<summary>
///
返回回調事件的結果。
///
</summary>
///
<returns></returns>
public
string
GetCallbackResult()
...
{
return
result;
}
}
ImageR
.aspx 頁面無內容,主要在
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>
///
'產生隨機字符串
///
</summary>
///
<paramname="num">
隨機出幾個字符
</param>
///
<returns>
隨機出的字符串
</returns>
private
string
GenCode(
int
num)
...
{
string
str
=
"
的一是在不了有和人這中大為上個國我以要他時來用們生到作地于出就分對成會可主發年動同工也能下過子說產種面而方后多定行學法所民得經十三之進著等部度家電力里如水化高自二理起小物現實加量都兩體制機當使點從業本去把性好應開它合還因由其些然前外天政四日那社義事平形相全表間樣與關各重新線內數正心反你明看原又么利比或但質氣第向道命此變條只沒結解問意建月公無系軍很情者最立代想已通并提直題黨程展五果料象員革位入常文總次品式活設及管特件長求老頭基資邊流路級少圖山統接知較將組見計別她手角期根論運農指幾九區強放決西被干做必戰先回則任取據處隊南給色光門即保治北造百規熱領七海口東導器壓志世金增爭濟階油思術極交受聯什認六共權收證改清己美再采轉更單風切打白教速花帶安場身車例真務具萬每目至達走積示議聲報斗完類八離華名確才科張信馬節話米整空元況今集溫傳土許步群廣石記需段研界拉林律叫且究觀越織裝影算低持音眾書布復容兒須際商非驗連斷深難近礦千周委素技備半辦青省列習響約支般史感勞便團往酸歷市克何除消構府稱太準精值號率族維劃選標寫存候毛親快效斯院查江型眼王按格養易置派層片始卻專狀育廠京識適屬圓包火住調滿縣局照參紅細引聽該鐵價嚴
"
;
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>
///
生成圖片(增加背景噪音線、前景噪音點)
///
</summary>
///
<paramname="checkCode">
隨機出字符串
</param>
private
void
CreateCheckCodeImage(
string
checkCode)
...
{
if
(checkCode.Trim()
==
""
||
checkCode
==
null
)
return
;
Session[
"
Code
"
]
=
checkCode;
//
將字符串保存到Session中,以便需要時進行驗證
System.Drawing.Bitmapimage
=
new
System.Drawing.Bitmap((
int
)(checkCode.Length
*
21.5
),
22
);
Graphicsg
=
Graphics.FromImage(image);
try
...
{
//
生成隨機生成器
Randomrandom
=
new
Random();
//
清空圖片背景色
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
);
//
畫圖片的前景噪音點
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();
}
}
}
保存直接運行即可!
Asp.net2005不用Ajax實現無刷新驗證用戶名、密碼和中文驗證碼
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元