架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 22784|回复: 1

[资料] MVC AJAX.BeginForm() 页面异步提交

[复制链接]
发表于 2016-6-30 10:44:01 | 显示全部楼层 |阅读模式

1、首先新建一个修改密码的的视图模型(viewmodel)
  1. using System.Collections.Generic;
  2. using System.ComponentModel;
  3. using System.ComponentModel.DataAnnotations;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Web.Mvc;

  8. namespace BM.Model
  9. {
  10.     public class PasswordModel
  11.     {
  12.         /// <summary>
  13.         /// 原密码
  14.         /// </summary>
  15.         [DisplayName("初始密码")] // 显示名字
  16.         [Required(ErrorMessage = "初始密码密码不能为空")] // 不能为空特性
  17.         [Remote("CheckPasswordIsOk", "User", ErrorMessage = "初始密码不正确", HttpMethod = "GET")] // 远程验证 User控制器下的 CheckPasswordIsOk 下去验证
  18.         //[DataType(DataType.Password)]
  19.         public string Password { get; set; }
  20.         /// <summary>
  21.         /// 新密码
  22.         /// </summary>
  23.         [DisplayName("新 密 码")]
  24.         [Required(ErrorMessage = "新密码不能为空")]
  25.         public string NewPassword { get; set; }
  26.         /// <summary>
  27.         /// 确认密码
  28.         /// </summary>
  29.         [DisplayName("确认密码")]
  30.         [System.ComponentModel.DataAnnotations.Compare("NewPassword", ErrorMessage = "新密码不匹配")] // 比较字段
  31.         public string ConfirmPassword { get; set; }
  32.     }
  33. }
复制代码


2、 新建一个强类型视图

  1. @{
  2.     Layout = null;
  3. }
  4. @model  BM.Model.PasswordModel
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8.     <title>修改密码</title>
  9.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  10.     <link href="~/Content/layer/skin/layer.css" rel="stylesheet" />
  11.     <scrip{过滤}t src="~/scrip{过滤}ts/jquery-1.10.2.js"></scrip{过滤}t>
  12.     <scrip{过滤}t src="~/scrip{过滤}ts/jquery.validate.js"></scrip{过滤}t>
  13.     <scrip{过滤}t src="~/scrip{过滤}ts/jquery.unobtrusive-ajax.min.js"></scrip{过滤}t>  // 这里需要注意的是: 使用Ajax.BeginForm提交表单是一定需要它,不然提交成功需要执行的js代码无法执行
  14.     <scrip{过滤}t src="~/scrip{过滤}ts/jquery.validate.unobtrusive.js"></scrip{过滤}t>
  15.     <scrip{过滤}t src="~/Content/layer/layer.js"></scrip{过滤}t>
  16.     <style>
  17.         * {
  18.             padding: 0;
  19.             margin: 0;
  20.         }

  21.         .title {
  22.             display: inline-block;
  23.             width: auto;
  24.             height: 34px;
  25.             font-size: 22px;
  26.             font-family: "宋体";
  27.             font-weight: 500;
  28.             /*color: #fff;
  29.             background-color:#0094ff;*/
  30.         }

  31.         .row {
  32.             margin: 8px;
  33.         }

  34.             .row input[type=text], .row input[type=password] {
  35.                 width: 300px;
  36.                 height: 30px;
  37.                 border: 1px solid #ddd;
  38.             }

  39.             .row input[type=submit] {
  40.                 text-align: center;
  41.                 line-height: inherit;
  42.                 width: 150px;
  43.                 height: 40px;
  44.                 font-size: 26px;
  45.                 margin-left: 80px;
  46.                 margin-top: 3px;
  47.                 color: #fff;
  48.                 background-color: #0094ff;
  49.             }

  50.         .field-validation-error {
  51.             color: red;
  52.             display: block;
  53.         }
  54.     </style>
  55. </head>
  56. <body>
  57.     <div class="content">
  58.         <h2 style="text-align:center">修改密码</h2>
  59.         <div class="form">
  60.             @using (@Ajax.BeginForm("ChangePassword", "User", new AjaxOptions() { InsertionMode = InsertionMode.Replace, HttpMethod = "POST", OnComplete = "complete" }, new { id = "form" }))
  61.             {
  62.                 @Html.AntiForgeryToken();  // 防止CSFR 攻击,配合控制器上的 ValidateAntiForgeryToken 一起使用
  63.                 <div class="row">
  64.                     <span class="title">@Html.DisplayNameFor(c => c.Password):</span> @Html.PasswordFor(c => c.Password)
  65.                     @Html.ValidationMessageFor(c => c.Password)
  66.                 </div>
  67.                 <div class="row">
  68.                     <span class="title">@Html.DisplayNameFor(c => c.NewPassword):</span> @Html.PasswordFor(c => c.NewPassword)
  69.                     @Html.ValidationMessageFor(c => c.NewPassword)
  70.                 </div>
  71.                 <div class="row">
  72.                     <span class="title">@Html.DisplayNameFor(c => c.ConfirmPassword):</span> @Html.PasswordFor(c => c.ConfirmPassword)
  73.                     @Html.ValidationMessageFor(c => c.ConfirmPassword)
  74.                 </div>
  75.                 <div class="row">
  76.                     <input id="btnSubmit" type="submit" value="确  认" />
  77.                 </div>
  78.             }
  79.         </div>
  80.     </div>
  81. </body>

  82. </html>
  83. <scrip{过滤}t>
  84.     function complete(data) {
  85.         var json = JSON.parse(data.responseText);
  86.         layer.msg('恭喜你,密码修改成功,请重新登录!!', {
  87.             time: 3000,
  88.             icon: 1
  89.         });
  90.         setTimeout(function () {
  91.             window.top.locatio{过滤}n.href = json.BackUrl;
  92.         }, 2000);
  93.     }
  94. </scrip{过滤}t>
复制代码


3. 以下是控制器中方法

  1. /// <summary>
  2.         /// 修改密码
  3.         /// </summary>
  4.         /// <returns></returns>
  5.         [HttpGet]
  6.         public ActionResult ChangePassword()
  7.         {
  8.             if (Session[CurrentUser] == null)
  9.             {
  10.                 return Redirect("/user/login");
  11.             }
  12.             return View();
  13.         }


  14.         [HttpPost, ValidateAntiForgeryToken]
  15.         public ActionResult ChangePassword(PasswordModel model)
  16.         {
  17.             using (BusinessManageEntities db = new BusinessManageEntities())
  18.             {
  19.                 int userId = (int)Session[CurrentUser];
  20.                 var bm = db.BusinessManager.Where(c => c.UserId == userId).FirstOrDefault();
  21.                 bm.BizPassword = Utils.Md5(model.NewPassword);
  22.                 db.SaveChanges();
  23.             }
  24.             //return Content("<scrip{过滤}t>base.AlertTip('修改密码成功');window.locatio{过滤}n.href='/user/login';</scrip{过滤}t>");
  25.             return Json(new { Message = "修改密码成功", BackUrl = "/user/login" }, JsonRequestBehavior.AllowGet);
  26.         }

  27.         /// <summary>
  28.         /// 检查用户密码是否正确
  29.         /// </summary>
  30.         /// <param name="Password">旧密码</param>
  31.         /// <returns></returns>
  32.         [HttpGet]
  33.         public ActionResult CheckPasswordIsOk(string password)
  34.         {
  35.             if (Session[CurrentUser] == null)
  36.             {
  37.                 return Redirect("/user/login");
  38.             }
  39.             int userId = (int)Session[CurrentUser];
  40.             using (BusinessManageEntities db = new BusinessManageEntities())
  41.             {
  42.                 var bm = db.BusinessManager.Where(c => c.UserId == userId).FirstOrDefault();
  43.                 if (bm.BizPassword.Equals(Utils.Md5(password)))
  44.                 {
  45.                     return Json(true, JsonRequestBehavior.AllowGet);
  46.                 }
  47.             }
  48.             return Json(false, JsonRequestBehavior.AllowGet);
  49.         }
复制代码






上一篇:asp.net NHibernate配置log4net日志记录sql语句
下一篇:C# 4.0中dynamic的用法
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2016-10-20 14:42:59 | 显示全部楼层
mvc返回javascrip{过滤}t脚本
http://www.itsvse.com/thread-3084-1-1.html
(出处: 架构师)
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-7-18 14:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表