Asp.net2005不用Ajax实现无刷新验证用户名、密

系统 1584 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元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论