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

 

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

 

主要功能:无刷新实现对用户名,密码,中文验证码的验证! 

技术要点:使用.NEt2005中新接口“ICallbackEventHandler”用asp.net动态生成中文验证码 

话不多说,直接看代码, 

只要有两个页面 Login.aspx  和 ImageR.aspx 

Login.aspx 的代码如下:  

<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " Login.aspx.cs "  Inherits = " Login "   %>  

<! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >  

< html xmlns = " http://www.w3.org/1999/xhtml "   >  
< head runat = " server " >  
< title > Login </ title >  
< script  language = " javascript "  type = " text/javascript " >  
        var div; 
        function callback() 
        
          var name
= document.getElementById( " UserName " ).value; 
          var pass
= document.getElementById( " PassWord " ).value; 
          var checkcode
= document.getElementById( " CheckCode " ).value; 
          div
= document.getElementById( " show_msg " ); 
          div.innerHTML   
=   " <img src=img/loading.gif> " +   ' 正在加载,请稍后.. ' ;    
          div.style.backgroundColor
= " AliceBlue " ;   
          dos(name
+ " & " + pass + " & " + checkcode); 
        } 
        function ReceiveServerData(text) 
        {            
            alert(text); 
            div.style.display
= " none "
            location.href 
=  location.href; 
        } 
        function over(o) 
        
           o.style.borderColor
= " #9ECC00 "
        } 
        function 
out (o) 
        
           o.style.borderColor
= " #A9BAC9 "
        } 
    
</ script >  
</ head >  
< body >  
    
< form id = " form1 "  runat = " server " >  
    
< div >  
        
< table style = " width: 218px; height: 96px; " >  
            
< tr >  
                
< td style = " width: 35px " >  
                    
< asp:Label ID = " Label1 "  runat = " server "  Text = " UserName "   ></ asp:Label ></ td >  
                
< td style = " width: 205px " >  
                    
< input id = " UserName "  type = " text "  style = " border-style:groove; border-color:#A9BAC9; width:148px "  onmouseout = " out(this) "  onmouseover = " over(this) "   /></ td >  
            
</ tr >  
            
< tr >  
                
< td style = " width: 35px; height: 12px; " >  
                    
< asp:Label ID = " Label2 "  runat = " server "  Text = " PassWord "  Width = " 44px " ></ asp:Label ></ td >  
                
< td style = " width: 205px; height: 12px; " >  
                    
< input id = " PassWord "  type = " password "  style = " border-style:groove; border-color:#A9BAC9; width:148px "  onmouseout = " out(this) "  onmouseover = " over(this) "   /></ td >  
            
</ tr >  
            
< tr >  
                
< td >  
                    
< asp:Image ID = " Image1 "  runat = " server "  ImageUrl = " ImageR.aspx "   /></ td >  
                
< td style = " height: 13px; width: 205px; " >  
                    
< input id = " CheckCode "  style = " border-style:groove; border-color:#A9BAC9; width:55px "  onmouseout = " out(this) "  onmouseover = " over(this) "  type = " text "  maxlength = " 4 "   /></ td >  
                 
            
</ tr >  
            
< tr >  
                
< td style = " height: 26px " >  
                
</ td >  
                
< td style = " width: 205px; height: 26px " >  
                    
< input id = " Login "  type = " button "  value = " 登 陆 "   onclick = " callback() "  style = " width: 60px "   />  
                
</ td >  
            
</ tr >  
            
< tr >  
                
< td style = " width: 35px; " >  
                
</ td >  
                
< td style = " width: 205px; " >  
                
< div id = " 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, EventArgs e) 
    
        
if  ( ! Page.IsPostBack) 
        
            
string  cbReference  =  Page.ClientScript.GetCallbackEventReference( this " text " " ReceiveServerData " "" );    // 获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。 
             string  callbackScript  =   " function dos(text){ "   +  cbReference  +   " ;} " ;                                         // 注册客户端方法 
            Page.ClientScript.RegisterClientScriptBlock( this .GetType(),  " dos " , callbackScript,  true );                   // 向客户端写入脚本块 
        } 
    } 
    
/**/ ///   <summary>  
    
///  处理回调事件。  
    
///   </summary>  
    
///   <param name="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, EventArgs e) 
    
        CreateCheckCodeImage(GenCode(
4 )); 
    } 
    
/**/ ///   <summary>  
    
///  '产生随机字符串 
    
///   </summary>  
    
///   <param name="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  =   ""
        Random rd 
=   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>  
    
///   <param name="checkCode"> 随机出字符串 </param>  
     private   void  CreateCheckCodeImage( string  checkCode) 
    
        
if  (checkCode.Trim()  ==   ""   ||  checkCode  ==   null
            
return
        Session[
" Code " =  checkCode;  // 将字符串保存到Session中,以便需要时进行验证 
        System.Drawing.Bitmap image  =   new  System.Drawing.Bitmap(( int )(checkCode.Length  *   21.5 ),  22 ); 
        Graphics g  
=  Graphics.FromImage(image); 
        
try  
        
            
// 生成随机生成器 
            Random random  =   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); 
            } 

            Font font 
=   new  System.Drawing.Font( " Arial " 12 , (System.Drawing.FontStyle.Bold)); 
            System.Drawing.Drawing2D.LinearGradientBrush brush 
=   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.MemoryStream ms 
=   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(); 
        } 

    } 
posted @ 2008-07-31 10:09 supers 阅读(26) 评论(0)   编辑 收藏 网摘 所属分类: 常用代码剪辑
td { font-size: 12px } .commentTextBox { font-family : Verdana; font-size: 13px; } a.blue:visited, a.blue:active, a.blue:link, a.blue:hover { color:blue; } .userData { BEHAVIOR: url(#default#userdata) } <script type="text/javascript"> function pageLoad() { Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(handleInitializeRequest); //Sys.WebForms.PageRequestManager.getInstance().add_endRequest(handleEndRequest); } function handleInitializeRequest(sender, args) { var prm = Sys.WebForms.PageRequestManager.getInstance(); var eid = args.get_postBackElement().id; /*if (eid.indexOf("DeleteLink")>0) { args.get_postBackElement().innerHTML = "<font color='red'>正在删除...</font>"; } else */ if (eid.indexOf("btnSubmit")>0) { document.getElementById("AjaxHolder_PostComment_ltSubmitMsg").innerHTML="正在提交..."; document.getElementById("AjaxHolder_PostComment_btnSubmit").disabled = true; } else if(eid.indexOf("refreshList")>0) { document.getElementById("AjaxHolder_PostComment_refreshList").innerHTML="<font color='red'>正在刷新...</font>"; } } function TempSave(ElementID) { try { CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value); CommentsPersistDiv.save("CommentXMLStore"); } catch(ex) { } } function Restore(ElementID) { CommentsPersistDiv.load("CommentXMLStore"); document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent"); } </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值