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

 

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

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

话不多说,直接看代码,

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

Login.aspx 的代码如下:Login.aspx.cs 的代码如下:这个页面实现自 ICallbackEventHandler 接口

<%@ 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>

 

 

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(00, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2Ftrue
);
            g.DrawString(checkCode, font, brush, 
22
);

            
//画图片的前景噪音点

            g.DrawRectangle(new Pen(Color.Silver), 00, 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();
        }


    }

}

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值