MVC3 数据验证用法之密码验证设计思路
描述:MVC数据验证使用小结
内容:display,Required,stringLength,Remote,compare,RegularExpression
本人最近在公司用mvc做了一个修改密码的功能,使用的是mvc数据验证,现将使用心得分享给大家
首先,我们先分析一下,如果要实现密码修改功能,我们需要做哪些工作。先从页面说起吧,前台页面起码需要三个密码框吧,分别表示原始密码,新密码,重复新密码,最后再加一个按钮,这样一个页面的基本元素就构造完毕了
其次,我们需要对添加的数据进行验证,包括,原始密码正确性验证,新密码格式验证,重复输入的密码一致性验证
最后,我们把修改后的密码保存到数据库里就大功告成了(注:这里只是简单的实现了密码的修改功能)
所以,分析到这里,思路也就清晰了,下面就该实现了
一、设计思路
1、设计一个修改密码模型类
2、使用mvc创建一个该模型类的强类型视图
3、提交表单,将新密码保存到数据库
二、代码实现
1、我们先看一下设计的模型类的代码吧
public class UserPwdEditModel {
[Display(Name = "旧密码")]
[Required(ErrorMessage = "请输入 {0}。")]
[Remote("Validate", "UserInfo", HttpMethod = "post", ErrorMessage = "旧密码错误")]
[Editable(true)]
public string OldPwd {
get;
set;
}
[Display(Name = "新密码")]
[Required(ErrorMessage = "请输入 {0}。")]
[RegularExpression(@"^(([a-z]+)|([A-Z]+)).([0-9]+)", ErrorMessage = "密码只能包含英文、数字(必须以字母开头)")]
[StringLength(, MinimumLength = , ErrorMessage = "密码长度限制在6-18个字符")]
public string NewPwd {
get;
set;
}
[Display(Name = "重复新密码")]
[Required(ErrorMessage = "请再次输入 新密码。")]
//[Remote("ValidateRepeatPwd", "UserInfo", HttpMethod = "post", AdditionalFields = "NewPwd", ErrorMessage = "两次密码不一致,请重新输入")]
[Compare("NewPwd", ErrorMessage = "两次密码不一致,请重新输入")]
public string RepeatPwd {
get;
set;
}
}
创建修改密码模型来
没错,我把页面上的基本元素做成了一个模型,这样可以很方便的使用mvc数据验证,其中Remote节里的参数分别代表action,controller,请求方式(Post/Get),错误提示信息ErrorMessage,action代码如下:
/// <summary>
/// 验证旧密码是否正确
/// </summary>
/// <param name="Password">旧密码</param>
/// <returns>如果旧密码正确,返回true;反之,返回false</returns>
[HttpPost]
public JsonResult Validate(string OldPwd) {
var str = this.db.Users.Where(p => p.ID == && p.Password == OldPwd).FirstOrDefault();
bool isvalidate = false;
if (str != null)
isvalidate = true;
return Json(isvalidate, JsonRequestBehavior.AllowGet);
}
验证原密码是否正确
/// <summary>
/// 验证两次密码是否相同
/// </summary>
/// <param name="NewPwd">初始化新密码</param>
/// <param name="RepeatPwd">重复输入新密码</param>
/// <returns>返回两次密码比较结果,若相等,返回true;反之,返回false</returns>
[HttpPost]
public JsonResult ValidateRepeatPwd(string NewPwd, string RepeatPwd) {
bool isvalidate = false;
if (NewPwd.Trim().ToLower() == RepeatPwd.Trim().ToLower())
isvalidate = true;
return Json(isvalidate, JsonRequestBehavior.AllowGet);
}
验证两次输入的新密码是否相同
2、下面我们创建强类型视图(创建过程省略...)
@model GraduateMISX.ViewModels.UserInfo.UserPwdEditModel
@{
ViewBag.Title = "PasswordEdit";
Layout = "~/Views/Shared/_Layout.cshtml";
} @using (Html.BeginForm("PasswordEdit", "UserInfo", FormMethod.Get, new {
@id = "formOfBettersoft"
})) {
<div class="tree-add-group">
<div class="tree-add-title">
@Html.LabelFor(model => model.OldPwd)
</div>
<div class="tree-add-text">
@Html.PasswordFor(model => model.OldPwd)
@Html.ValidationMessageFor(model => model.OldPwd)
</div>
</div>
<div class="tree-add-group">
<div class="tree-add-title">
@Html.LabelFor(model => model.NewPwd)
</div>
<div class="tree-add-text">
@Html.PasswordFor(model => model.NewPwd)
@Html.ValidationMessageFor(model => model.NewPwd)
</div>
</div>
<div class="tree-add-group">
<div class="tree-add-title">
@Html.LabelFor(model => model.RepeatPwd)
</div>
<div class="tree-add-text">
@Html.PasswordFor(model => model.RepeatPwd)
@Html.ValidationMessageFor(model => model.RepeatPwd)
</div>
</div>
<div class="tree-add-group">
<input type="submit" value="保存" style="left: 200px" id="btnSubmit"/>
</div>
}
创建强类型视图
注:在使用Remote验证的时候应在Web.config文件下配置appsetting节
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
配置web.config
三、运行截图
运行程序,点击提交按钮后将会看到模型验证已经生效


MVC3 数据验证用法之密码验证设计思路的更多相关文章
- 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路
前言:“我们有一个订单列表,希望能够根据当前登陆的不同用户看到不同类型的订单数据”.“我们希望不同的用户能看到不同时间段的扫描报表数据”.“我们系统需要不同用户查看不同的生产报表列”.诸如此类,最近经 ...
- 大数据:Hadoop(HDFS 的设计思路、设计目标、架构、副本机制、副本存放策略)
一.HDFS 的设计思路 1)思路 切分数据,并进行多副本存储: 2)如果文件只以多副本进行存储,而不进行切分,会有什么问题 缺点 不管文件多大,都存储在一个节点上,在进行数据处理的时候很难进行并行处 ...
- Centos 6、7 禁止密码验证登陆
Centos 6.7 禁止密码验证登陆 安全方面的考虑,秘钥对验证登陆相对密码验证要更安全 修改 /etc/ssh/sshd_config 配置文件 该配置文件中,只需要修改一个参数 Password ...
- asp.net mvc3 数据验证(四)—Remote验证的一个注意事项
原文:asp.net mvc3 数据验证(四)-Remote验证的一个注意事项 前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我 ...
- asp.net mvc3 数据验证(三)—自定义数据注解
原文:asp.net mvc3 数据验证(三)-自定义数据注解 前两节讲的都是asp.net mvc3预先设定的数据注解,但是系统自由的数据注解肯定不适合所有的场合,所以有时候我们需要 ...
- asp.net mvc3 数据验证(二)——错误信息的自定义及其本地化
原文:asp.net mvc3 数据验证(二)--错误信息的自定义及其本地化 一.自定义错误信息 在上一篇文章中所做的验证,在界面上提示的信息都是系统自带的,有些读起来比较生硬.比如: ...
- 转 Web用户的身份验证及WebApi权限验证流程的设计和实现
前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及Action的权 ...
- [置顶] Web用户的身份验证及WebApi权限验证流程的设计和实现 (不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!!)
转发 http://blog.csdn.net/besley/article/details/8516894 不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!! [ ...
- Web用户的身份验证及WebApi权限验证流程的设计和实现 asp.net mvc AllowAnonymous 不起作用, asp.net mvc 匿名访问
原文地址: https://blog.csdn.net/zjlovety/article/details/17095627 前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个 ...
随机推荐
- iTop Webservice列表
{ u'operations':[ { u'verb':u'core/create', u'description':u'Create an object', u'extension':u'CoreS ...
- JavaScript 入门教程四 语言基础【2】
一.数据类型介绍: undefined null NaN 1.判断当前变量是否为 undefined: if (i === undefined) 或者 if (typeof (i) === " ...
- PHP 数组的拷贝是按值传递 or 按引用传递
在记忆中 PHP 简单变量的拷贝是按值传递,数组和对象的拷贝是按引用传递,即通过引用来实现. 简单变量和对象好理解: <?php // 简单变量的拷贝 $a = 'human'; $b = $a ...
- 分析-eclipse已经导入jar包了,但还是出现classNotFound异常
场景:分析-eclipse已经导入jar包了,但还是出现classNotFound异常 分析--eclipse已经导入jar包了,但还是出现classNotFound错误 最近在做一个web项目时,由 ...
- 让javascript显原型!
相信以下的javascript让你读起来痛苦不已,告诉你一下简单的办法,就可以让它显出原型!将第一个单词,即eval换成document.write,然后再运行一下,它立即就原形毕露了! eval(f ...
- Objective-C Runtime使用之全局字体替换为第三方字体(iOS)
前言: iOS开发里头,常用的设置字体方式是使用UIFont的systemFontOfSize这个Class Method,在一半情况下都算够用. 最近有设计师朋友问能不能在客户端中使用特定的字体,答 ...
- rabbitmq method之basic.consume
basic.consume指的是channel在 某个队列上注册消费者,那在这个队列有消息来了之后,就会把消息转发到给此channel处理,如果 这个队列有多个消费者,则会采用轮转的方式将消息分发给消 ...
- xcode中使用正则表达式来搜索替换代码
有这样的需求: 类似于 GLOBAL_STR(@"请继续添加"); 这样的代码,需要批量修改为: GLOBAL_STR(@"请继续添加", nil); 这里使用 ...
- 网络监测工具-iftop教程
在类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用netstat.nmap等工具.若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop. 一.if ...
- 在Linux下禁用IPv6的方法小结
在Linux下禁用IPv6的方法小结--http://www.jb51.net/LINUXjishu/335724.html 这篇文章主要介绍了在Linux下禁用IPv6的方法小结,禁用IPv6的操作 ...