客户端验证换了,服务器验证持性

ASP.Net MVC Model(模型+验证)

本系列目录:ASP.NET MVC4入门到精通系列目录汇总

模型就是处理业务,想要保存、创建、更新、删除的对象。

注解(通过特性实现)

  • DisplayName
  • Required
  • StringLength(20,MinimumLength=2)
  • DataType(System.ComponentModel.DataAnnotations.DataType.MultilineText)
  • RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$",ErrorMessage="邮箱格式不对!")

.Net MVC请求处理流

请求→IIS→Runtime→Controller→Action → ViewResult(:ActionResult).ExcuteResult()→ RazorView(:IView).RenderView→Response

请求都归结到Action上,所以是Url驱动

Action跟View是松耦合

所有的页面继承在viewpage类

View模板显示页面的规则:先找对于的Controller文件夹,再找对应的Shared文件夹

包括数据、验证规则、数据访问和业务逻辑等应用程序信息它是我们MVCWeb应用的主框架

Model调用的是我们的业务逻辑层

Model作为ViewModel使用的情况

Model是独立的组件,不知道View和Controller的存在

MVC验证

System.ComponentModel.DataAnnotations

定义验证规则:

Model属性添加内置验证特性,介绍用的最多的其中的四个:

[Required], [StringLength], [Range], 和 [RegularExpression]

[StringLength(10,ErrorMessage="长度限制!")]
       public string LoginName { get; set; }

定义自己的定制验证特性,然后应用它们。你可以通过继承自System.ComponentModel.DataAnnotations命名空间中 的ValidationAttribute基类,定义完全定制的特性。

public class EmailAttribute : RegularExpressionAttribute
    {
        public EmailAttribute()
            :base(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")
        {
        }
    }

Model

        [Email]
        public string Email { get; set; }

View


1

<div>@Html.LabelFor(x=>x.Email):@Html.TextBoxFor(x=>x.Email)@Html.ValidationMessageFor(x=>x.Email)</div>

效果:

客户端验证

1.引入JS脚本支持

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

2.添加语句
    @{Html.EnableClientValidation(true);}(MVC3+版本中默认开启)

服务器端验证

1.控制器中使用:ModelState.IsValid 判断是否通过验证

DataModel验证

MetadataTypeAttribute Class
为数据实体的partial class添加额外的元数据验证信息
使用步骤:
创建data-model partial class
创建关联的metadata class.
将metadata class关联到具体的数据实体类
使用的注意事项:
标签只能打到一个类上
此标签不能被继承
使用示例:

using System.ComponentModel;using System.ComponentModel.DataAnnotations;using System.Web.Mvc;

namespace MvcApplication.Models{    public class EmailAttribute : RegularExpressionAttribute    {        public EmailAttribute()            : base(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")        {        }    }    [MetadataType(typeof(UserMetadata))]    public partial class User    {        public string UserName { get; set; }        public string Remark { get; set; }        public string Age { get; set; }        public string Pwd { get; set; }        public string RePwd { get; set; }        public string Email { get; set; }    }    //1.为实体类添加特性DisplayName    public class UserMetadata    {        [DisplayName("用户名")]        [Remote("NotExitesDdata", "Home")]        public string UserName { get; set; }        /// <summary>        /// 1.在实体类中为Remark属性设置DataType特性,指定为多行文本框        /// </summary>        [DataType(DataType.MultilineText)]        [DisplayName("备注")]        public string Remark { get; set; }        [DisplayName("年龄")]        [Range(1,120)]        public int Age { get; set; }        [PasswordPropertyText]        [DisplayName("密码")]        public string Pwd { get; set; }        [PasswordPropertyText]        [DisplayName("重输密码")]        [System.Web.Mvc.Compare("Pwd")]        public string RePwd { get; set; }        [Email]        public string Email { get; set; }    }} 

另外提到一点,模型里面我在用户名属性上面添加了一个Remote特性,这个是一个异步调用的属性,可以指定触发某个action,返回值为bool(true or false),比如注册用户时,可用于验证用户名是否存在。

Controller

        public JsonResult NotExitesDdata()
        {
            string UserName = Request.Params["UserName"];
            return UserName == "123" ? Json(true,JsonRequestBehavior.AllowGet) : Json(false,JsonRequestBehavior.AllowGet);
        }

效果:

时间: 2024-10-13 00:01:03

客户端验证换了,服务器验证持性的相关文章

客户端自行连苹果服务器验证购买完成返回的receipt

//write your test code here NSError *error = nil; NSDictionary *requestContents = @{@"receipt-data":[receipt base64EncodedStringWithOptions:0] ,@"password":@"29596c75453d49d4a8a46b7e89fff625"}; NSData *requestData = [NSJSONSe

Centos6.4下快速构建基于用户名密码验证的openvpn服务器

如今VPN应用已经非常广泛了,之前就写过一篇关于PPTPD的博文.链接是http://cyr520.blog.51cto.com/714067/1161788. 家里最近新换了一个宽带.居然没办法用拨上公司的PptpdVPN,一直拨号状态一直停留在正在验证用户名和密码这一步.百度谷歌了一大圈,也没解决这个问题.貌似是因为宽带运营商屏蔽GRE协议的原因.作为运维人员,不能及时的连上公司的内部网络是一件很让人不爽的事情. 干脆再搞一套OpenVPN吧,据说OpenVPN非常强大,可以适应很复杂的网络

ASP.NET MVC的客户端验证:jQuery的验证

http://www.cnblogs.com/artech/archive/2012/06/17/client-validation-01.html 之前我们一直讨论的Model验证仅限于服务端验证,即在Web服务器根据相应的规则对请求数据实施验证.如果我们能够在客户端(浏览器)对用户输入的数据先进行验证,这样会减少针对服务器请求的频率,从而缓解Web服务器访问的压力.ASP.MVC 2.0及其之前的版本采用ASP.NET Ajax进行客户端验证,在ASP.NET MVC 3.0中,jQuery

&#8203;实现以账号密码验证的VPN服务器

声明 作者:昨夜星辰 博客:http://yestreenstars.blog.51cto.com/ 本文由本人创作,如需转载,请注明出处,谢谢合作! 目的 实现以账号密码验证的VPN服务器. 环境 服务端:CentOS 6.2 32 客户端:Windows XP 服务端配置 # 关闭SELinux sed -i '/^SELINUX\b/s/=.*/=disabled/' /etc/selinux/config setenforce 0 # 安装mysql-server yum -y inst

C++使用Socket 邮箱登录服务器验证

转载:http://blog.csdn.net/zengraoli/article/details/36866241 转载:http://blog.csdn.net/alger_magic/article/details/25164187 一.如果想单纯验证一个邮箱帐号是否存在,我们可以拿邮箱帐号和密码请求服务器验证. .h文件 #ifndef _AUTHENTICATIONEMAIL_H_ #define _AUTHENTICATIONEMAIL_H_ #include <atlenc.h>

苹果内购服务器验证之receipt返回多组in_app思考

最近有部分用户反映,苹果内购充值失败,经过测试总结有几个关键点出现问题 1.app购买成功苹果没有返回票据,属于票据遗漏(取决于苹果服务器的响应状况),只能客户端进行监听刷新等处理 2.app连续购买的过程中,前几次苹果没有返回票据,几次之后,苹果返回了一个有效的票据,app提交给服务器进行验证的过程中in_app出现多组数据的情况,这种情况还是能充值成功了,只是不能全部到账 3.app连续购买,有一次正常返回票据,在提交给服务器的过程中出现意外,但实际服务端已经接受到票据,为用户成功充值,但a

dojo demo, 服务器验证用户名是否已经被使用

这个demo有助于理解JS与服务器的协同工作. 文档结构如上图,  主要是三个文件: main.js  table.html validateUserName.jsp (代码见文章末尾) 页面打开如下: 选中第一个输入框后,右侧出现定义好的提示信息.如下: 输入"olduser" , 为了简化验证过程,在validateUserName.jsp 中用硬编码验证用户名是否为"olduser", 返回JSON字串. 如果是,则返回{valid:false}, 否则返回{

微信开发:微信服务器验证通过

申请自己的微信公众号部署后台服务器 代码解析 申请自己的微信公众号,部署后台服务器 公众号 SuperLishun,想要源码的可以关注公众号,给我留言. 百度微信公众号,首先要申请自己的微信公众号,我只申请了个订阅号,先把基本的调通,如下图 这里我们可以手动群发图文消息,设置自动回复消息,设置目录等等,但是作为开发者,我们要学着使用微信的API去做这些事情. 首先你需要有一个服务器,用来供微信调用,我这里用的是阿里云的服务器,作为测试1核2G内存就够了,1个月也就是100块钱,可以用来玩玩,如下

报错:非介入式客户端验证规则中的验证类型名称必须唯一。下列验证类型出现重复

当在ASP.NET MVC中,针对一个Model进行添加操作的时候,报如下错误: [InvalidOperationException: 非介入式客户端验证规则中的验证类型名称必须唯一.下列验证类型出现重复: range] 原因是第三方验证程序集和MVC固有验证发生名称的冲突. 解决办法:在Model中属性上注释掉第三方程序集提供的验证特性.

关于去苹果服务器验证充值的一些看法

前端时间看了下关于app充值验证发送游戏金币的好多帖子和文章,http:// 其中这个帖子回复的大神比较多:点击打开链接 内容大概是这样子的: 那位大神做了pomelo去苹果服务器验证充值的,能说一下思路和做法么. 标签:无 haiyang126537 在 2013-12-23 17:00发布 分享到 weibo 3 回复 #1 {6} Munmoon 在 2013-12-23 17:46 回复