02-17 位图验证码(一般处理程序)+AJAX
2024-08-28 20:59:10
建立一个空网站,在设计界面工具箱中拖入一个TextBox工具,一个按钮,外加一个Image图片工具(充当数字、字母以图片形式)。但是这样做出来的验证码会出现一个问题,每当点击一下按钮,界面自动提交一遍,重新刷新一遍再返回,为防止整个页面被重新提交,需要加入一个UpdatePanel,只刷新当前updatePanel内的内容即可。
必须要结合AJAX来使用
界面设计好后,需要添加一个以ashx结尾的文件项,在这里面写位图随机验证码的格式等等。
<%@ WebHandler Language="C#" Class="Code" %> using System;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Web.SessionState;
//一般处理程序要使用session,必须要继承IRequiresSessionState接口(接口就是一个空的方法),session存在于这个接口中
public class Code : IHttpHandler,IRequiresSessionState { public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "image/jpeg";
Bitmap img = new Bitmap(, );//位图,画了一个空白的图形
Graphics g = Graphics.FromImage(img);// string s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
string str = "";
Random rand = new Random();//初始化随机数
for (int i = ; i < ; i++)
{
int start = rand.Next(); //生成一个随机的起始位置
str += s.Substring(start, ).ToString();
}
context.Session["code"] = str;//session用于传值 Font font = new Font("宋体",, FontStyle.Bold);//设置字体格式
SolidBrush brush = new SolidBrush(Color.White);
g.FillRectangle(brush, , , , );
brush.Color = Color.Red;
g.DrawString(str, font, brush, , );
img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
} public bool IsReusable {
get {
return false;
}
} }
一般处理程序:有一个页面A,传递参数到一般处理程序,处理程序接收到参数,访问数据库,判断正确,跳转下一个页面,错误,跳转到另一个页面.
在aspx的Js源代码中,写function语句,确保传递参数
<body>
<form id="form1" runat="server">
<div> <asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager> </div>
<p>
</p> <asp:Image ID="Image1" runat="server" ImageUrl="~/Code.ashx" /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
<asp:Label ID="Label1" runat="server" Text="失败"></asp:Label>
</form>
</body>
</html>
<script>
//js方法
function changeimg()
{
var img = document.getElementById("Image1");
img.src = "Code.ashx?1=" + Math.random();//使用母版页之后,自己写的ID和JS生成的ID会不一样,需要手动更改ID(方法1)
}
</script>
//方法2:嵌生成之后的ID
<script>
function changeimg()
{
var img = document.getElementById("<%=Image1.ClientID%>"); //使用经<% %>转译之后ID
img.src = "Code.ashx?1=" + Math.random();
}
</script>
界面效果:
最新文章
- 吐槽贴:百度地图 api 封装 的实用功能 [源码下载]
- 线程的创建pthread_create.c
- [GodLove]Wine93 Tarining Round #2
- Sort List
- 【转】 Update和FixedUpdate的区别
- [OpenGL ES 03]3D变换:模型,视图,投影与Viewport
- delphi回调函数
- node-webkit
- 关于uC/OS的简单学习(转)
- LDA-线性判别分析(一)
- java学习——abstract 和 final
- post跨域请求
- Activtiy完全解析(三、View的显示过程measure、layout、draw)
- asp.net core 学习资料整理
- [Swift]LeetCode803. 打砖块 | Bricks Falling When Hit
- C#基础知识之反射
- 高性能Nginx服务器-负载均衡
- 概率分布之间的推导关系 | Univariate Distribution Relationships
- 编写一个漂亮的网站 第一课堂 基于vs编辑
- Centos7 设置静态IP后重启网络服务出错