下面是最终的效果图,最下面的那个是验证控件:
昨天搞网站的时候,发现需要一个验证码控件,我以前写过一个生成验证码的东西,不过需要附加一个aspx页面,如ImageValidatePostPage.aspx,然后在image控件这样引用:
[image src=”ImageValidatePostPage.aspx” /]
然后在ImageValidatePostPage.aspx的Page_load中返回一个图片的数据,原理其实就是Post页面获得一个图片而已,比较简单,但是对于一个验证码图片来说,很明显把它做成一个类似于图片控件的控件比较合理,如果用户使用时再不需要附加其他的页面或者做其他的动作,例如写webservices,那么这种控件才是我们程序员追求的完美控件。因此昨天完成了验证码控件所需要的算法部分,今天查了些资料把嵌入页面到dll中的部分实现了,呵呵,再次打破什么所谓的时间逼定惯例,熬夜把实现过程及代码分享出来,希望对大家有所帮助。
使用:
提供如下属性:
ValidateType为验证的形式,支持数字,字母和混合三种模式。其中无论为数字或字母,为避免混乱,去掉0(零)和O(欧)。Length为验证码的字符数目,DistrubuteNumber为干扰线的数目。
使用方式为:
拖控件到页面上,如要得到验证码的值,可以用Value属性,另外需要在Web.Config中增加如下节点
其中验证码算法参考这位仁兄代码:
http://www.webjx.com/htmldata/2006-01-21/1137824356.html
我对其代码做了如下修改:
1. 增加了验证控件的长度和宽度的属性
2. 增加了干扰线的数目的属性
3. 增加了显示的字符长度的属性
4. 增加了三种验证码显示模式
5. 修改代码,使控件验证码的字体大小跟据长宽变化,并在控件中居中显示
其中将aspx页面文件编译到dll中的方法参考这位仁兄文章:
http://dev.csdn.net/develop/article/83/83459.shtm
由于其代码针对于asp.net 1.1,而我用的是.net 2.0,所以稍微有点儿区别。
与其文章做法不同的地方或遇到的问题如下:
1. 在增加陷阱时,我刚开始并没有看到所谓“显示完整的编译源”的超链接,其原因是我在web.config没有把编译选项设置为debug=”true”,希望大家照做时不要走弯路。
2. 把//dependencies.Add(“W:”"wwwroot”"dlltest”"ex2.aspx”); 注释掉让DLL成为一个无依赖的独立文件这里,我并没有找到。
我是将生成的类的构造函数除最后一句全部注释掉,然后删除protected global_asax ApplicationInstance属性,并把FrameworkInitialize函数中的this.AddWrappedFileDependencies(global::ASP.imagevalidatepostpage_aspx.@__fileDependencies);这句去掉。
3. 对于作者所提供的小技巧,我刚开始没看到,我是直接用VS解决的,首先用如图所示Line ???:
将每行的行号去掉,然后把所有的#line替换成//#line注释掉,然后编译就OK了,现把原文件和编译后的dll及示例共享出来:
/Files/doggod2008/ImageValidateSample.rar
注:示例工程需要建立成WebApplication方式访问






还没有任何评论。