ASP.NET自定义验证控件

1.新建一个网站
2.新建一个AuthCode.cs文件,代码如下:直接复制就OK了
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Web.SessionState;
using System.Drawing;
using System.IO;

namespace AuthCode
{
[ToolboxData("{0}:AuthCode>")]
public class AuthCode : WebControl
{
/// 〈summary>
/// 获得验证码的值
/// 〈/summary>
/// 〈returns>验证码〈/returns>
public string GetValue()
{
return HttpContext.Current.Session["value"].ToString();
}

[Bindable(true)]
[Category("Appearance")]
[Description("验证码字符长度")]
[DefaultValue("ss")]
[Localizable(true)]
//长度
internal static int mySize;

public int MySize
{
get { return AuthCode.mySize; }
set
{
AuthCode.mySize = value;
}
}

public AuthCode()
: base(HtmlTextWriterTag.Img)//重写父类的构造(输出流的HTML标记)
{ }

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);//将要输出的的HTML标签的属性和样式添加到指定的 HtmlTextWriter中
writer.AddStyleAttribute(HtmlTextWriterStyle.Cursor, "pointer");//添加样式

writer.AddAttribute("onclick", "this.src='img.jd?id='+Math.random()");//添加js VerifyImg.jd
writer.AddAttribute(HtmlTextWriterAttribute.Src, "img.jd");
writer.AddAttribute("alt", "点击刷新");
}

}


public class AuthCodeHttpHander : IHttpHandler, IRequiresSessionState
{
///
/// 返回验证码字符
///
/// 验证码长度
///
private string GetRandomNumberString(int codeCount)
{
string strChoice = "2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] strResult = strChoice.Split(new Char[] { ',' });
string strReturn = "";
Random rnd = new Random();
for (int i = 0; i
/// 是否可以处理远程的HTTP请求
///
public bool IsReusable
{
get { return true; }
}

///
/// 将验证码图片发送给WEB浏览器
///
///
public void ProcessRequest(HttpContext context)
{
int size = AuthCode.mySize; //Int32.Parse((String)context.Session["Size"]);
MemoryStream ms = new MemoryStream(); // 创建内存流(初始长度为0 自动扩充)
string NumStr = GetRandomNumberString(size);// 获得验证码字符
context.Session.Add("value", NumStr);//将验证码字符保存到session里面
Bitmap theBitmap = CreateImage(NumStr);// 获得验证码图片
theBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);//将位图写入内存流
context.Response.ClearContent(); //清除缓冲区里的所有内容输出
context.Response.ContentType = "image/jpeg"; //需要输出图象信息 要修改HTTP头
context.Response.BinaryWrite(ms.ToArray()); //将内存流写入HTTP输出流
theBitmap.Dispose(); //释放资源
ms.Close();//释放资源
ms.Dispose();//释放资源
context.Response.End();
}

}

}


3.编译DLL文件
(编译前记得AuthCode.cs文件保存在"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"目录下)

接着>>“开始”—“运行”—“cmd” ,用下面的两条命令编译AuthCode.cs文件为.DLL文件。 :

cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

csc /target:library AuthCode.cs


4.在项目中使用

4.1:修改web.config 文件

在 <system.web> </system.web>间加入下面的代码:
<httpHandlers>
<add verb="*" path="*.jd" type="AuthCode.AuthCodeHttpHander" />
</httpHandlers>

4.2:
将得到的DLL文件添加到项目的引用中,在“工具箱”中右键点“选择项...”——在.net组件中勾选“AuthCode”(如下图),点确定之后工具箱中就会增加一个AuthCode控件。

将这个控件从工具箱中拖到页面里使用。选中拖出的控件,在其属性中设置MySize即验证码的长度为某一正整数。例如设置成4,自动生成的代码如下(还有自动生成的注册这个控件的代码,这里未列出):

<cc1:AuthCode ID="AuthCode1" runat="server" MySize="4" />

提供附件使用>>如果你下载后出现问题,那是因为你没有把AuthCode.dll文件添加到工具栏里
点击工具栏>>常规(右键)->选择项>浏览,找到你所在的AuthCode.dll文件位置

------------------------------

上面是自己做过的...我看别人的帖子的时候,别人说还会出现其他问题,我也不太清楚,由于资源问题,没有仔细研究了,但是验证码的效果出来了!
如果出现什么问题:
详情>>[url]http://bbs.51cto.com/thread-555596-1.html[/url]
也可以参考下载后的代码!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值