知识大全 Asp.Mvc 2.0用户登录实例讲解:服务器端验证

Posted 密码

篇首语:八成熟,十成收;十成熟,二成丢。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Asp.Mvc 2.0用户登录实例讲解:服务器端验证相关的知识,希望对你有一定的参考价值。

Asp.Mvc 2.0用户登录实例讲解:服务器端验证  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  这一节给大家讲解下ASP NET MVC 的服务器端验证的用法 大家知道 一个项目只用JS客户端验证是不安全的 用户可以禁用JS来绕过客户端验证 所以必须有服务器端验证

  关于服务器端验证 主要调用System ComponentModel DataAnnotations命名空间里面的类库

  具体用法参照

   cn/library/ponentmodel dataannotations aspx

  咱们这次还是以注册页面为例来讲解服务器端验证

  主要对注册页面做如下验证

   用户名不能为空

   密码不能为空 密码长度不能小于 位数

   密码和确认密码输入必须一样

   邮件格式必须正确

  咱们先看下效果图

  

  MVC中对所有字段的验证 实际上只需要在MODEL层设置验证规则就可以

   用户名验证

  对用户名的验证 只需要验证用户名不为空就可以了 使用Required属性 把此属性绑定到MODEL的用户名字段上就可以了

  /// <summary> /// 用户名 /// </summary> [DisplayName( 用户名 )] [Required(ErrorMessage= 用户名不能为空! )] public string UserName get; set;

  Required里面的参数表示具体的提示信息 此时如果用户名为空 就会在前台ASPX页面出现用户名不能为空的提示 当然要在前台显示错误的提示信息 使用<%:Html ValidationMessageFor(m=>m UserName)%>

  标记就可以在前台显示错误的提示信息

   密码验证

  密码验证包括密码不能为空和密码长度限制

  验证密码为空和验证用户名为空一样 使用Required属性

  验证密码的长度使用StringLength属性

  /// <summary> /// 密码 /// </summary> [DisplayName( 密码 )] [Required(ErrorMessage= 密码不能为空 )] [StringLength( ErrorMessage = 密码长度不能小于 位 MinimumLength= )] public string UserPwd get; set;

  StringLength的第一个参数表示密码的最大长度 ErrorMessage表示不满足条件的时候的错误提示信息

  MinimumLength表示输入内容的最小长度

  当然 前台必须有地方显示错误信息 显示错误信息我们使用如下

  <%:Html ValidationMessageFor(m=>m UserPwd)%>

   验证密码和确认密码是否一致

  要验证密码和确认密码是否一致 这个稍微有点复杂 需要我们自定义验证规则 自定义验证规则我们需要继承ValidationAttribute类 然后实现它的isvaild方法

  /// <summary> /// 此自定义类用于验证密码和确认密码必须一致 /// </summary> [AttributeUsage(AttributeTargets Class AllowMultiple = true Inherited = true)] public class PwdMatch :ValidationAttribute private object _typeid = new object(); public string PWD get; set; //密码 public string ConfirmPwd get; set; //确认密码 public PwdMatch(string pwd string confirmPwd) : base() PWD = pwd; ConfirmPwd = confirmPwd; /// <summary> /// 返回错误的提示信息 /// </summary> /// <param name= name ></param> /// <returns></returns> public override string FormatErrorMessage(string name) return ErrorMessage; /// <summary> /// 重写TYPEID /// </summary> public override object TypeId get return _typeid; /// <summary> /// 判断是否想到 /// </summary> /// <param name= value >value的值实际上是MODEL提交的MODEL类</param> /// <returns></returns> public override bool IsValid(object value) PropertyDescriptorCollection properties = TypeDescriptor GetProperties(value); object originalValue = properties Find(PWD true ) GetValue(value);//获取密码 object confirmValue = properties Find(ConfirmPwd true) GetValue(value);//获取确认密码的值 return Object Equals(originalValue confirmValue);

  PwdMatch属性类创建后 可把它标记在注册MODEL的上面 然后提交注册的时候 就会验证了

  [PwdMatch( UserPwd ConfirPwd ErrorMessage = 密¨ 码?与??确¨?¤认¨?不?匹£¤配? )]

  public class RegisterModel

  PwdMatch的第一个参数表上密码 名称与RegisterModel中的密码属性相同

  第二个字段是确认密码 名称与RegisterModel与的确认密码属性相同

  最后一个参数是错误提示信息

  当然 也要在前台显示错误提示信息 使用

  <%:Html ValidationSummary(true 用??户?ì创???建?§失o?ì败?¨ ! )%>就可以在前台显示一个总的错误信息列表

   邮箱验证

  邮箱验证主要是邮箱格式验证 验证格式是否满足要求

  验证邮箱我们使用RegularExpressions属性就可以

  /// <summary> /// 用户邮箱 /// </summary> [DisplayName( 邮箱 )] //[DataType(DataType EmailAddress)] [RegularExpression(@ ^\\w+(( \\w+)|(\\ \\w+))*\\@[A Za z ]+((\\ | )[A Za z ]+)*\\ [A Za z ]+$ ErrorMessage = 电子邮件格式错误 )] public string Email get; set;

  第一个参数邮箱验证的正则表达式 第二个参数是错误提示信息

  在ASPX页面显示错误信息用

  <%:Html ValidationMessageFor(m=>m Email)%>

  以上是对用户注册信息的验证 当然 我们在提交信息的时候 要判断验证是否通过 我们使用ModelState IsValid来判断验证是否通过 TRUE表示通过 FALSE表示未通过

  model代码

  

  /// <summary> /// 注册用户MODEL /// </summary> [PwdMatch( UserPwd ConfirPwd ErrorMessage = 密码与确认不匹配 )] public class RegisterModel /// <summary> /// 用户名 /// </summary> [DisplayName( 用户名 )] [Required(ErrorMessage= 用户名不能为空! )] public string UserName get; set; /// <summary> /// 密码 /// </summary> [DisplayName( 密码 )] [Required(ErrorMessage= 密码不能为空 )] [StringLength( ErrorMessage = 密码长度不能小于 位 MinimumLength= )] public string UserPwd get; set; [DisplayName( 确认密码 )] [Required(ErrorMessage= 确认密码不能为空! )] [StringLength( ErrorMessage = 确认密码长度不能小于 位 MinimumLength= )] public string ConfirPwd get; set; /// <summary> /// 用户邮箱 /// </summary> [DisplayName( 邮箱 )] //[DataType(DataType EmailAddress)] [RegularExpression(@ ^\\w+(( \\w+)|(\\ \\w+))*\\@[A Za z ]+((\\ | )[A Za z ]+)*\\ [A Za z ]+$ ErrorMessage = 电子邮件格式错误 )] public string Email get; set; /// <summary> /// 此自定义类用于验证密码和确认密码必须一致 /// </summary> [AttributeUsage(AttributeTargets Class AllowMultiple = true Inherited = true)] public class PwdMatch :ValidationAttribute private object _typeid = new object(); public string PWD get; set; //密码 public string ConfirmPwd get; set; //确认密码 public PwdMatch(string pwd string confirmPwd) : base() PWD = pwd; ConfirmPwd = confirmPwd; /// <summary> /// 返回错误的提示信息 /// </summary> /// <param name= name ></param> /// <returns></returns> public override string FormatErrorMessage(string name) return ErrorMessage; /// <summary> /// 重写TYPEID /// </summary> public override object TypeId get return _typeid; /// <summary> /// 判断是否想到 /// </summary> /// <param name= value >value的值实际上是MODEL提交的MODEL类</param> /// <returns></returns> public override bool IsValid(object value) PropertyDescriptorCollection properties = TypeDescriptor GetProperties(value); object originalValue = properties Find(PWD true ) GetValue(value);//获取密码 object confirmValue = properties Find(ConfirmPwd true) GetValue(value);//获取确认密码的值 return Object Equals(originalValue confirmValue);

  前台页面代码

  <%@ Page Language= C# Inherits= System Web Mvc ViewPage<MvcLogin Models RegisterModel> %> <!DOCTYPE PUBLIC //W C//DTD XHTML Transitional//EN transitional dtd > < xmlns= > <head runat= server > <title>注册页面</title> <script type= text/javascript src= / /Scripts/jquery vsdoc js ></script> <script type= text/javascript src= / /Scripts/jquery validate js ></script> <script type= text/javascript > // $() ready(function () // $( #form ) validate( // // rules: // // UserName: // // required: true // // UserPwd: // // required: true // minlength: // // ConfirPwd: // // required: true // minlength: // equalTo: #UserPwd // // Email: // // email: true // // // messages: // // UserName: // // required: <span style= color:red >用户名不能为空! </span> // // UserPwd: // // required: <span style= color:red >密码不能为空!</span> // minlength: jQuery format( <span style= color:red >密码长度不能小于 个字符!</span> ) // // ConfirPwd: // // required: <span style= color:red >确认密码不能为空!<span> // minlength: jQuery format( 确认密码长度不能小于 个字符! ) // equalTo: <span style= color:red >两次输入密码不一致!</span> // // Email: // // email: <span style= color:red >邮箱输入格式不正确!</span> // // // onkeyup: false // ); // ); </script> </head> <body> <div> <br /> <p > <%if (ViewData[ msg ] != null) %> <%:ViewData[ msg ]%> <% %> </p> <br /> <p> <%:Html ValidationSummary(true 用户创建失败! ) %> </p> <%Html BeginForm( Register user FormMethod Post new name= form id= form ) ; %> <table> <tr> <td><%: Html LabelFor(m => m UserName) %></td> <td> <%: Html TextBoxFor(m => m UserName) %></td> <td><%:Html ValidationMessageFor(m=>m UserName) %></td> </tr> <tr> <td> <%: Html LabelFor(m => m UserPwd) %></td> <td> <%: Html PasswordFor(m => m UserPwd) %></td> <td><%:Html ValidationMessageFor(m=>m UserPwd) %></td> </tr> <tr> <td> <%: Html LabelFor(m => m ConfirPwd) %></td> <td> <%: Html PasswordFor(m => m ConfirPwd)%></td> <td><%:Html ValidationMessageFor(m=>m ConfirPwd) %></td> </tr> <tr> <td> <%: Html LabelFor(m => m Email) %></td> <td> <%: Html TextBoxFor(m => m Email) %></td> <td><%:Html ValidationMessageFor(m=>m Email) %></td> </tr> <tr> <td> <input type= submit value= 提交 /></td> <td></td> <td></td> </tr> </table> <%Html EndForm(); %> </div> </body> </>

  controller代码

  

cha138/Article/program/net/201311/12671

相关参考

知识大全 讲解孤立用户和对象名无效问题的解决方法[2]

  方法二使登录用户和数据库的孤立用户对应起来  其实我们建立了同样名称的数据库登录用户后数据库中的表我们照样不能使用时因为sid的不同就是系统登录表和数据库用户表中的用户名相同单是sid字段数据库中

知识大全 如何允许root用户远程登录

  我们不建议你允许root用户通过telnet方式远程登录而且系统缺省也是不允许这样做的    如果希望以root的身份远程管理服务器可以在服务器上安装SSHD然后通过SecureShell连接到服

知识大全 修改Tomcat服务器的端口号

修改Tomcat服务器的端口号  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本实例主要介绍修改

知识大全 在服务器端控制网页

  使用Net和C#开发Web应用程序往往能给我们很大的启示尤其在开发相对简单的例行任务时就更是如此例如在许多时候我们都需要有条件地显示一个网页的一部分需要这么做的原因有许多例如根据用户的角色有一部分

知识大全 网络编程 质数判别示例

   该示例实现的功能是质数判断程序实现的功能为客户端程序接收用户输入的数字然后将用户输入的内容发送给服务器端服务器端判断客户端发送的数字是否是质数并将判断的结果反馈给客

知识大全 理解ASP.NET 2.0中的单点登录

理解ASP.NET2.0中的单点登录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!摘要 

知识大全 页面输出缓存

  最简单的缓存机制把整个Aspx页面保存在服务器端内存中用户请求页面时直接从服务器端内存中提取数数据不在经历页面的生命周期主要用于不经常更新和修改而在第一次编译是时要经过大量处理的数据页面输出缓存是

知识大全 开放网络用户登录什么意思

开放网络用户登录什么意思意思是可以开放为其他网络平台账号登录:比如QQ登录、微博登录、微信登录等。TCL网络电视用户登录怎么登录方法一:从路由器中找到一个空闲的接口,将网络线连接到电视机网口。TCL网

知识大全 深入讲解JSP 2.0下的动态内容缓存技术

深入讲解JSP2.0下的动态内容缓存技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  内容缓存

知识大全 oracle修改用户登录密码

  使用oracle用户登录连接数据库  [oracle@wuzj~]$sqlplus/nolog  SQL*Plus:ReleaseProductiononThuFeb::  Copyright(c