• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    asp.net 图片验证码的HtmlHelper
    一个图片验证码的HtmlHelper,原来的调用代码如下:
    复制代码 代码如下:

    img id="validateCode" mailto:src='@Url.Action(%22GetValidateCode%22)'/>
    script language="javascript" type="text/javascript">
    $(document).ready(function () {
    $("#validateCode").bind("click", function () {
    var url = $(this).attr("src");
    url += "?" + Math.random();
    $(this).attr("src", url);
    });
    });
    /script>

    封装成HtmlHelper后:
    @Html.ValidateCode()
    使用步骤如下:
    1.建一个验证码Helper
    复制代码 代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics.CodeAnalysis;
    using System.Globalization;
    using System.Linq.Expressions;
    using System.Security.Policy;
    using System.Text;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Mvc.Resources;
    using System.Web.Routing;
    namespace MvcApplication1
    {
    public static class ValidateCodeHelper
    {
    private const string IdPrefix = "validateCode";
    private const int Length = 4;
    public static MvcHtmlString ValidateCode(this HtmlHelper helper)
    {
    return ValidateCode(helper, IdPrefix);
    }
    public static MvcHtmlString ValidateCode(this HtmlHelper helper,string id)
    {
    return ValidateCode(helper, id, Length);
    }
    public static MvcHtmlString ValidateCode(this HtmlHelper helper, string id, int length)
    {
    return ValidateCode(helper, id, length, null);
    }
    public static MvcHtmlString ValidateCode(this HtmlHelper helper, string id, object htmlAttributes)
    {
    return ValidateCode(helper, id, Length, htmlAttributes);
    }
    public static MvcHtmlString ValidateCode(this HtmlHelper helper, int length, object htmlAttributes)
    {
    return ValidateCode(helper, IdPrefix, length, htmlAttributes);
    }
    public static MvcHtmlString ValidateCode(this HtmlHelper helper, object htmlAttributes)
    {
    return ValidateCode(helper, 4, htmlAttributes);
    }
    public static MvcHtmlString ValidateCode(this HtmlHelper helper, int length)
    {
    return ValidateCode(helper,length, null);
    }
    public static MvcHtmlString ValidateCode(this HtmlHelper helper,string id,int length,object htmlAttributes)
    {
    string finalId = id + "_imgValidateCode";
    var tagBuild = new TagBuilder("img");
    tagBuild.GenerateId(finalId);
    var defaultController = ((Route)RouteTable.Routes["Default"]).Defaults["controller"] + "/";
    var controller = HttpContext.Current.Request.Url.Segments.Length == 1
    ? defaultController
    : HttpContext.Current.Request.Url.Segments[1];
    tagBuild.MergeAttribute("src", string.Format("/{0}GetValidateCode?length={1}",controller,length));
    tagBuild.MergeAttribute("alt", "看不清?点我试试看!");
    tagBuild.MergeAttribute("style","cursor:pointer;");
    tagBuild.MergeAttributes(AnonymousObjectToHtmlAttributes(htmlAttributes));
    var sb = new StringBuilder();
    sb.Append("script language=\"javascript\" type=\"text/javascript\">");
    sb.Append("$(document).ready(function () {");
    sb.AppendFormat("$(\"#{0}\").bind(\"click\", function () {{", finalId);
    //sb.Append("$(this).attr(\"style\", \"cursor:pointer;\");");
    sb.Append("var url = $(this).attr(\"src\");");
    sb.Append("url += \"\" + Math.random();");
    sb.Append("$(this).attr(\"src\", url);");
    sb.Append("});");
    sb.Append("});");
    sb.Append("/script>");
    return MvcHtmlString.Create(tagBuild+sb.ToString());
    }
    public static RouteValueDictionary AnonymousObjectToHtmlAttributes(object htmlAttributes)
    {
    var result = new RouteValueDictionary();
    if (htmlAttributes != null)
    {
    foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(htmlAttributes))
    {
    result.Add(property.Name.Replace('_', '-'), property.GetValue(htmlAttributes));
    }
    }
    return result;
    }
    }
    }

    2.生成验证码的代码:
    复制代码 代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.IO;
    using System.Drawing.Imaging;
    namespace MvcApplication1
    {
    public class ValidateCode
    {
    public ValidateCode()
    {
    }
    /// summary>
    /// 验证码的最大长度
    /// /summary>
    public int MaxLength
    {
    get { return 10; }
    }
    /// summary>
    /// 验证码的最小长度
    /// /summary>
    public int MinLength
    {
    get { return 1; }
    }
    /// summary>
    /// 生成验证码
    /// /summary>
    /// param name="length">指定验证码的长度/param>
    /// returns>/returns>
    public string CreateValidateCode(int length)
    {
    var randMembers = new int[length];
    var validateNums = new int[length];
    var validateNumberStr = "";
    //生成起始序列值
    var seekSeek = unchecked((int)DateTime.Now.Ticks);
    var seekRand = new Random(seekSeek);
    var beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
    var seeks = new int[length];
    for (var i = 0; i length; i++)
    {
    beginSeek += 10000;
    seeks[i] = beginSeek;
    }
    //生成随机数字
    for (var i = 0; i length; i++)
    {
    var rand = new Random(seeks[i]);
    var pownum = 1 * (int)Math.Pow(10, length);
    randMembers[i] = rand.Next(pownum, Int32.MaxValue);
    }
    //抽取随机数字
    for (var i = 0; i length; i++)
    {
    var numStr = randMembers[i].ToString();
    var numLength = numStr.Length;
    var rand = new Random();
    var numPosition = rand.Next(0, numLength - 1);
    validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
    }
    //生成验证码
    for (var i = 0; i length; i++)
    {
    validateNumberStr += validateNums[i].ToString();
    }
    return validateNumberStr;
    }
    /// summary>
    /// 创建验证码的图片
    /// /summary>
    /// param name="validateCode">验证码/param>
    public byte[] CreateValidateGraphic(string validateCode)
    {
    var image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
    var g = Graphics.FromImage(image);
    try
    {
    //生成随机生成器
    var random = new Random();
    //清空图片背景色
    g.Clear(Color.White);
    //画图片的干扰线
    for (int i = 0; i 25; i++)
    {
    var x1 = random.Next(image.Width);
    var x2 = random.Next(image.Width);
    var y1 = random.Next(image.Height);
    var y2 = random.Next(image.Height);
    g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
    }
    //Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
    string[] fontName = { "华文新魏", "宋体", "圆体", "黑体", "隶书" };
    var font = new Font(fontName[new Random().Next(0, validateCode.Length)], 12, (FontStyle.Bold | FontStyle.Italic));
    var brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
    Color.Blue, Color.DarkRed, 1.2f, true);
    g.DrawString(validateCode, font, brush, 3, 2);
    //画图片的前景干扰点
    for (var i = 0; i 100; i++)
    {
    var x = random.Next(image.Width);
    var y = random.Next(image.Height);
    image.SetPixel(x, y, Color.FromArgb(random.Next()));
    }
    //画图片的边框线
    g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
    //保存图片数据
    var stream = new MemoryStream();
    image.Save(stream, ImageFormat.Jpeg);
    //输出图片流
    return stream.ToArray();
    }
    finally
    {
    g.Dispose();
    image.Dispose();
    }
    }
    /// summary>
    /// 得到验证码图片的长度
    /// /summary>
    /// param name="validateNumLength">验证码的长度/param>
    /// returns>/returns>
    public static int GetImageWidth(int validateNumLength)
    {
    return (int)(validateNumLength * 12.0);
    }
    /// summary>
    /// 得到验证码的高度
    /// /summary>
    /// returns>/returns>
    public static double GetImageHeight()
    {
    return 23;
    }
    }
    }

    3.建一个BaseController
    复制代码 代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    namespace MvcApplication1
    {
    public class BaseController:Controller
    {
    public ActionResult GetValidateCode(int length)
    {
    var vCode = new ValidateCode();
    var code = vCode.CreateValidateCode(length);
    Session["ValidateCode"] = code;
    var bytes = vCode.CreateValidateGraphic(code);
    return File(bytes, @"image/gif");
    }
    protected string GetValidateCode()
    {
    return Session["ValidateCode"].ToString();
    }
    }
    }

    4.让Controller继承BaseController:
    复制代码 代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Security;
    namespace MvcApplication1.Controllers
    {
    public class HomeController :BaseController
    {
    public ActionResult Index()
    {
    ViewBag.Message = "Welcome to ASP.NET MVC!";
    return View();
    }
    public ActionResult About()
    {
    var code = GetValidateCode();
    return View();
    }
    }
    }

    5.页面调用代码:
    复制代码 代码如下:

    @using MvcApplication1
    @{
    ViewBag.Title = "About Us";
    }
    h2>About/h2>
    p>
    Put content here.
    /p>
    @Html.ValidateCode()

    6.验证码的效果图:

    源码可以从这里下载: ValidateCode.rar
    您可能感兴趣的文章:
    • asp.net 验证码生成和刷新及验证
    • ASP.net 验证码实现代码(C#)
    • asp.net(C#) 生成随机验证码的代码
    • Asp.net(C#)实现验证码功能代码
    • asp.net 简单验证码验证实现代码
    • ASP.NET MVC验证码功能实现代码
    • ASP.NET 实现验证码以及刷新验证码的小例子
    • ASP.NET中的无刷新验证码的开发(完整代码)
    • asp.net ajax实现无刷新验证码
    • ASP.NET生成验证码的方法
    上一篇:asp.net计算一串数字中每个数字出现的次数
    下一篇:一步一步asp.net ajax类别Tree生成
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    asp.net 图片验证码的HtmlHelper asp.net,图片,验证,码,的,