asp.net利用C#语言生成验证码

本文介绍了博主在ASP.NET中使用C#生成验证码遇到的问题及解决方法,通过button和ajax的UpdatePanel控件避免页面全局刷新,实现验证码的局部更新。在初始尝试中,CustomValidator的隐藏属性导致验证失败,随后博主尝试了多种方案,最终确定利用button点击事件结合ajax局部刷新成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言(生成验证码的方法简介)

利用button按钮实现验证码的生成 + ajax的UpdatePanel控件实现局部刷新(因为一旦点击button按钮进行验证码的重新生成就会刷新页面,所以需要通过ajax进行局部刷新)

说明(博主的血泪史)

博主一开始采用的是 文本框用户输入验证码+div图层显示验证码+js生成验证码+CustomValidator自定义验证控件(再自定义一个函数用来判断用户输入的验证码是否正确) 这个方法,思路是正确的,但是在运行的时候不知道为什么系统自行给CustomValidator自定义验证控件加了"Visibility:hidden"属性,使判断结果无法展示出来,而且上面的属性修改没用,一运行程序还是会显示hidden. !!!就无语
后来博主换了方法用label标签显示验证码+js生成验证码,然后将验证码赋给label( label的id.innerHtML=验证码)+后台获取验证码的值后在方法里面进行验证,结果发现无法获取label的文本值(文本值为空),后来百度有说是用txtBox的,但是博主用了还是无法获取值,然后博主深思熟虑想是不是js赋值给txtBox/label和后台获取的对应的文本内容是不一致的.然后又换了另外的方法
label/txtBox显示验证码+后台随机产生验证码然后在赋值给label/txtBox(PageLoad方法里面随机生成验证码—因为一打开页面就需要显示出验证码),但是这又出了bug—>label/txtBox的文本内容与随机生成的文本内容不一致,这样导致后台验证一直是错误
博主就一个字: 绝!!!
后来博主千思万想—-利用button+ajax的方法
button的文本用来显示验证码,(这里要注意在最开始就给button的文本一个默认验证码–因为button的click事件只有点击了才能实行)button的click事件用来随机生成验证码,但是因为一点击button,就会进行全局刷新(整个页面刷新,但是咱们只是想让验证码部分进行刷新),所以利用ajax进行局部刷新.
最后经过测试,结果正确!!!
千辛万苦终于写出来了!!!在写不出来,博主要哭死了

生成验证码的代码展示

.aspx页面代码(前端代码)

 <asp:TextBox ID="txtCheck" runat="server" placeholder="请输入验证码" autocomplete="off" class="layui-input" style="display: inline-block;" ></asp:TextBox>
                <asp:ScriptManager runat="server"></asp:ScriptManager>  <!--使用ajax一定要先添加管理控件-->
                <asp:UpdatePanel ID="UpdatePanel1" runat="server" style="width:110px;display:inline-block ;">   <!--使用ajax的局部刷新控件-->
                    <ContentTemplate>
                         <asp:Button ID="btnCode" runat="server" Text="5gQ2" OnClick="btnCode_Click" BorderStyle="None" Font-Bold="True" Height="33px" Width="72px" Font-Size="X-Large"  style="margin-left:25px;"/>  <!--button控件放在ajax局部刷新控件内部,则button控件的点击引起的刷新也会自动引起ajax进行局部刷新-->
                    </ContentTemplate>
                </asp:UpdatePanel>

.aspx.cs页面代码(后台代码)

//button按钮的click事件
protected void btnCode_Click(object sender, EventArgs e)
    {
        string[] randNumber = { "1","2", "3", "4", "5", "6", "7", "8", "9", "0",
        "q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","c","z","x","v","b","n","m","Q","E",
        "R","T","Y","U","I","A","D","F","G","H","J","K","L","Z","X","C","V","B","N","M"};
        Random rd = new Random();    //创建随机(Random)类对象实例
        btnCode.Text = "";
        for (int i = 0; i < 4; i++)   //随机生成四个验证码元素
        {
            int index = rd.Next(randNumber.Length); //随机生成一个数--范围[0,randNumber.Length)  ---用来表示数组的下标
            btnCode.Text += randNumber[index];  //随机生成的元素赋值给button的文本
        }

    }

.aspx.cs后台验证代码(判断用户验证码是否输入正确)

<!--下面这部分验证正误的代码你可以写在你的注册/登录等按钮事件里-->

if (btnCode.Text.Trim() == txtCheck.Text.Trim())  //判断验证码是否输入正确
{
Response.Write("<script>alert('" + "验证成功" + "')</script>");
} 
else
{
  Response.Write("<script>alert('" + "验证失败!验证码输入错误,请重新输入!" + "')</script>");
}
该压缩包为 imgchk 文件夹 ,其中有三个文件:validatecode.asp,validatebody.fix,validatehead.fix   主要即是为生成 验证码 服务的。   将解压文件夹直接释放在需要在某页添加验证码的同目录下,(比如 addnew.asp 需要添加验证码,该文件在 cnbruce 文件夹下,则将 imgchk 文件夹同时释放到 cnbruce 文件夹 中)   2、添加显示验证码和输入框   在需要添加验证码的页面中添加如下代码: <input name='validatecode' type='text' size='5'> <img src='imgchk/validatecode.asp' align='absmiddle' border='0'>   3、记录接受页面处理   在步骤2中,一定会将记录提交到某个页面处理,那么在该处理页中添加如下代码: If Trim(Request.Form("validatecode"))=Empty Or Trim(Session("cnbruce.com_ValidateCode"))<>Trim(Request.Form("validatecode")) Then response.write("请注意正确输入验证码") response.end end if   验证码原理:   在生成验证码图片的时候,同时生成了一个Session,其值就是验证码图片中的数字值。   同时,提供输入框让用户输入,提交输入值后,与已有的Session值进行比较,根据判断结果做相应判断。   如果需要修改Session的name,只有两个地方改动:   a:您下载的imgchk文件夹中的validatecode.asp,其中涉及到cnbruce.com的该成您的;   b:就是刚才的步骤 3中Trim(Session("cnbruce.com_ValidateCode"))<>Trim(Request.Form("validatecode")) 中的cnbruce.com换成a所设定的。   另外===================================================   显示校验码的补丁(有些朋友显示不出验证码,这里看看)   用下面内容创建文件SP2.reg(用记事本就可以,保存时选“另存为”) Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Security] "BlockXBM"=dword:00000000   双击导入注册表中,然后重启机器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值