Asp.net2005不用Ajax实现无刷新验证用户名、密
系统
2166 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元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。
【本文对您有帮助就好】元