ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码

  首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变?

  先说一下为什么有这个需求:以提交注册信息页面为例,一般注册都需要用户填一个验证码信息(防止机器恶意注册),并且这个验证码会提交到后台去进行比对,若是错了则不会检查其他提交信息而直接返回浏览器端提示验证码错误。若是简单地用form表单直接将数据提交到指定的url,当验证码填写错误的信息返回浏览器端的时候,不可避免整个页面都会重新刷新一次,这是用户所不想要的,因为其它的一些正确信息还需要重新再填一次,这样就造成用户体验不太好。而这个问题就可以通过Ajax异步提交表单来实现。(这只是其中一种解决方案)

  下面就来看看具体的实现:

  前台Html代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Ajax异步提交表单之检查验证码</title>
    </head>
    <body>

    <form action="javascript:AjaxPostData()" method="post">
        <label>用户名:</label>
        <input name="account" class="form-control" id="account" type="text" placeholder="用户名" required="required" />
        <label>密码:</label>
        <input name="password" class="form-control" id="password" type="password" placeholder="密码" required="required" />
        <label>验证码:</label>
        <img id="valiCode" class="validcode" src="/Home/GetValidateCode" alt="验证码" title="点击刷新" />
        <input name="code" class="form-control" id="code" type="text" placeholder="验证码" required="required" />
        <button type="submit">提交</button>
    </form>

    <script src="~/Scripts/jquery-1.12.1.min.js"></script>
    <script>
        //刷新验证码
        function RefreshValiCode() {
            document.getElementById("valiCode").src = "/GetValidateCode?time=" + (new Date()).getTime();
        }

        function AjaxPostData()
        {
            var code = document.getElementById("code").value;
            var account = document.getElementById("account").value;
            var password = document.getElementById("password").value;
            $.ajax({
            url: ‘/User/Register‘,//数据提交到的目标url
            type: ‘post‘,//post方式提交
            async: true,//异步提交
            data: {account: account, password: password, code: code },//提交的数据
            success: function (data) {//发送成功的回调函数
                if (data.success) {
                    alert("注册失败!");
                }
                else {
                    alert("注册成功!");
                    RefreshValiCode();//刷新验证码
                    document.getElementById("code").value = "";//置空输入框
                }
            },
            error: function () {
                alert("请求失败!请重新提交!");
                }
            });
        }
    </script>
    </body>
</html>

  注:jquery-1.12.1.min.js需要自己下载引用。

  后台C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;

namespace Test.Controllers
{
    public class UserController : Controller
    {
         /// <summary>
        /// 注册
        /// </summary>
        /// <param name="code">验证码</param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Register(string name, string password, string code)
        {
            //Session["RegisterCode"]在生成验证码的时候设置其值
            if (string.IsNullOrWhiteSpace(code) || Session["RegisterCode"].ToString().ToUpper() != code.ToUpper())
            {
                return Json(new { success = false});
            }
            else
            {
                //其它操作...
                return Json(new { success = true});
            }

        }
    }
}

  此次知识分享就到这,敬请期待下一次的分享。^_^

<我的博客主页>:http://www.cnblogs.com/forcheng/

<Wing工作室主页>:http://www.wingstudio.org/

时间: 2024-10-12 23:31:56

ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码的相关文章

使用ajax异步提交表单

虽然这篇文章的标题是提交表单,但是主要的难点在于使用ajax提交文本域的内容, 在工作中的经常会需要ajax跨域的问题,通常的需求使用jsonp就可以得到解决,但是当前项目中有一个图片服务器,客户端需要直接上传图片到图片服务器中,这就产生了一个跨域post提交文件的问题,很显然jquery本身jsonp只支持get方式的异步提交肯定是不行 其中也尝试过使用ifrmae的方法来提交数据,在网上有,但是效果不理想,并且也很复杂的样子,最后选择出了jquery.from.js 这个插件,可以实现异步的

MVC之AJAX异步提交表单

第一种用法: 在MVC中,依然可以使用ajax校验,跟在WebForm中的使用时一样的,唯一的区别就是将以前的URL路劲改为访问控制器下的行为 前台 <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scripts/jquery-1.8

ASP.NET MVC 网站开发总结(三) ——图片截图上传

本着简洁直接,我们就直奔主题吧,这里需要使用到一个网页在线截图插件imgareaselect(请自行下载). 前台页面: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="css/imgareaselect-default.css" /> </head> <

Ajax方式提交表单的常见编码类型总结

用Ajax方式提交表单,决定编码类型的是请求头中Content-Type,不同的值对应不同的提交和回调处理方式.而且,在项目中我们会用到前端的库或者框架,他们对于不同的Content-Type也有不同的参数写法,本文将以jQuery和AngularJS,加上XMLHttpRequest共三种方式为例,详细介绍不同Content-Type的发送请求的方式.本文考虑的Content-Type类型,共有如下几种: application/x-www-form-urlencoded multipart/

Asp.net Mvc Ajax.BeginForm提交表单

之前Mvc中一直用Html.BeginForm提交表单,即如下: @using (Html.BeginForm("Add", "News", FormMethod.Post, new { enctype = "multipart/form-data" })) { <table> <tr> <td><span style="color:red">*</span><

jQuery通过AJAX快速提交表单数据

当表单数据项很多时,手动获取表单项的值将变得效率低下,结合jQuery提供的函数serialize(),我们可以实现快速获取数据并提交表单数据. 请看下面的表单: <form id="fm"> <table> <tr> <td>姓名</td> <td> <input type="text" name="name" /> </td> </tr>

tp5中ajax方式提交表单

用ajax提交表单,迅速,快捷,实现页面无刷新提交表单. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ajax批删</title> </head> <body> <center> <table> <tr> <td>姓名</t

ASP.NET MVC 网站开发总结(四)——校友平台开发总结

又历经一个多月的努力,学校的一个校友平台项目也接近内测的尾声了,简单的总结一下这次的项目开发. 与上次做WingStudio工作室的门户网站相比,同样是团队开发,参与的人员多了一个,用的时间也差不多一个月,但从总体做的情况来看,这次比上一次要做的好得多(不论是页面的样式还是后台的模块化封装),这是进步也是必然,这次自己的任务仍旧是负责后台以及后台与前台的拼接. 总的来说,用ASP.NET MVC开发网站的效率是相当高的(而且也相当的好部署),特别是针对后台的开发,只要前期对页面的功能分析到位,立

ASP.NET MVC 网站开发总结(六)——简谈Json的序列化与反序列化

首先,先简单的谈一下什么是序列化与反序列化,序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化(Deserialization)对象的状态,重新创建该对象. 一般我们把Json的序列化与反序列化用在哪些地方呢?对于网站开发来说,一般我们会用Json来进行前台和后台的数据传递(常与Ajax一起使用),而这个过程就涉及到了Json的序列化与反序列化. 那么我们就来简单看