@HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证

如图示例:


模型注解

通过模型注解后,MVC的验证,包括前台客户端,后台服务器的验证,MVC统统都做了包含,即使用户在客户端禁用Javascript,服务器也会将非法操作进行验证,当前前提是针对Model实体标识了注解的情况。

要能够正常进行非空等合法性验证必须做如下步骤(前提条件):

1.必须在实体的每个类型上加上Required特性,但是数字型的属性默认已经加上了。

2.必须在视图上导入如下脚本:

<script src="~/Scripts/jquery-1.7.1.js"></script>   

<script src="~/Scripts/jquery.validate.js"></script>

<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>  ——非嵌入式脚本

3.配置文件里的属性配置如下:

  <appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

MVC默认自带的样式:

<link href="~/Content/Site.css" rel="stylesheet" />

关键命名空间:

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

使用实例

一、非空验证

在属性上打标:

  [Required(ErrorMessage="不能为空")]
public string dUserName { get; set; }

在视图创建标签处加上@Html.ValidationMessageFor,此标签是当验证错误时,会有相应提示,本质是一个span标签

  @Html.TextBoxFor(d=>d.dUserName)
@Html.ValidationMessageFor(d=>d.dUserName)

二、约束文本框输入的长度

关键代码:

[StringLength(10, MinimumLength = 4, ErrorMessage = "名称长度只能介于4到10之间")]
public string dUserName { get; set; }

三、给表单项的控件加上描述表示

关键代码:

[DisplayName("姓名")]
public string dUserName { get; set; }

视图代码加上相应代码:

@Html.DisplayNameFor(d=>d.dUserName)

相应效果:

四、约束整数的取值范围,在属性上打标如下:

[Range(100,1000,ErrorMessage="最小为100元,最多捐1000元")]

五,保证该文本框输入与另一个要相同 (可用于两次密码输入保持一致)

[Compare("Pwd1",ErrorMessage="两次输入密码不一致")]

第一个参数是要匹配的属性名称

六、使用正则表达式

[RegularExpression("\\d+",ErrorMessage="密码必须为纯数字")]

七、自定义类型表单标签

后台代码:

     [DataType(DataType.EmailAddress)]
[DisplayName("电子邮件")]
public string Email { get; set; }

前台使用:

  @Html.DisplayNameFor(d=>d.Email)  ----提示文本
@Html.EditorFor(d=>d.Email) -----自定义类型标签 为email格式
@Html.ValidationMessageFor(d=>d.Email) ---提示错误消息标签

这里输入错误的提示消息,默认是英文,需要修改文件可以改成中文,修改图解:

八、Remote标注属性对,文本框输入,通过Ajax连接数据库,判断有效性 (此方法是效验时配合ajax连接数据库)

例:注册时可用于检查用户名是否被使用过,神奇效果:

注意:Remote是通过Ajax请求来进行验证,为了防止缓存一般写成post请求

打标:

[Remote("checkUsername","Donation",ErrorMessage="用户名已经存在",HttpMethod="post")]   

checkUsername (action方法)

Donation (控制器名称)

Action方法配合使用示例:

    [HttpPost]
public ActionResult checkUsername()
{
//1.获取检查的值
string uname = Request["dUserName"]; //2.连接数据库判断
DonationEntities db=new DonationEntities ();
var model=db.DonationDetail.FirstOrDefault(d=>d.dUserName==uname); if (model!=null&&model.dUserName==uname)
{
return Content("false");
} return Content("true");
}

九、后台验证

MVC验证客户端,需要依赖js脚本文件,如果用户在浏览器里禁用了JavaScript,

这时我在后台可使用以下相应对策。

//表示验证实体对象中所有标注了特性标签的属性是否合法,如果其中有一个不合法则返回false
if (ModelState.IsValid==false)
{
/*
对于验证失败返回视图相应的提示消息
* 视图中需要 @Html.ValidateionSummry(true)标签配合使用
*/
ModelState.AddModelError("","实体验证失败");
return View();
}

MVC的验证(模型注解和非侵入式脚本的结合使用)的更多相关文章

  1. MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式

    MVC的验证(模型注解和非侵入式脚本的结合使用)   @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...

  2. MVC中的模型注解

    authour: chenboyi updatetime: 2015-04-26 21:28:42 friendly link:   目录: 1,思维导图 2,内容解析 3,CodeSimple 1, ...

  3. Hibernate Validation,Spring mvc 数据验证框架注解

    1.@NotNull:不能为 Null,但是可以为Empty:用在基本数据类型上. @NotNull(message="{state.notnull.valid}", groups ...

  4. Spring学习(1):侵入式与非侵入式,轻量级与重量级

    一. 引言 在阅读spring相关资料,都会提到Spring是非侵入式编程模型,轻量级框架,那么就有必要了解下这些概念. 二. 侵入式与非侵入式 非侵入式:使用一个新的技术不会或者基本不改变原有代码结 ...

  5. 非侵入式JavaScript(Unobtrusive javaScript)理解

    转载自 https://my.oschina.net/leegq/blog/279750 在Web的早期阶段,也就是在jQuery出现以前,在同一个文件中混杂JavaScript代码和HTML标记是非 ...

  6. 支付宝开源非侵入式 Android 自动化测试工具 Soloπ

    Soloπ(SoloPi)是支付宝开源的一个无线化.非侵入式的Android自动化测试工具,公测版拥有录制回放.性能测试.一机多控三项主要功能,能为测试开发人员节省宝贵时间. 本文是SoloPi团队关 ...

  7. BlockCanary 一个轻量的,非侵入式的性能监控组件(阿里)

    开发者博客: BlockCanary — 轻松找出Android App界面卡顿元凶 开源代码:moduth/blockcanary BlockCanary对主线程操作进行了完全透明的监控,并能输出有 ...

  8. 使用phpAnalysis打造PHP应用非侵入式性能分析器

    使用phpAnalysis打造PHP应用非侵入式性能分析器,查找PHP性能瓶颈. 什么是phpAnalysis phpAnalysis是一款轻量级非侵入式PHP应用性能分析器,适用于开发.测试及生产环 ...

  9. Spring 侵入式和非侵入式

    1.非侵入式的技术体现 允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须从Spring框架的系统API的某个类来继承或者实现某个接口. 2.如何实现非侵入式 ...

随机推荐

  1. Train Problem II(卡特兰数 组合数学)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1023 Train Problem II Time Limit: 2000/1000 MS (Java/ ...

  2. Delphi导出word

    //导出Wordprocedure TFrm_Computing.ExportWord;varwordApp, WordDoc, WrdSelection, wrdtable, wrdtable1, ...

  3. 说说移动端web开发中的点击穿透问题

    最近一直在忙于一个无线端的项目,由于之前主要工作都是在桌面端,移动端接触的比较少,所以中间遇到了很多的坑,做一个简单的记录. 问题背景 需求中有这样的一个功能,点击取件信息的时候会弹出一个地址列表的浮 ...

  4. 【wordpress】wordpress自定义主题

    wordpress每个主题至少要有这两个文件 – style.css 和 index.php. index.php 告诉主题中所有的元素如何布局; style.css 则告诉主题中所有的元素该如何展示 ...

  5. 计算两个NSDate之间,相隔多少秒数

    计算两个NSDate之间,相隔多少秒数 //两个时间间隔秒数 - (NSInteger)intervalSecondsWithSmallDate:(NSDate*)smallDate bigDate: ...

  6. [转]ECMAScript 6 入门 -编程风格

    本文转自:http://es6.ruanyifeng.com/#docs/style 编程风格 块级作用域 字符串 解构赋值 对象 数组 函数 Map结构 Class 模块 ESLint的使用 本章探 ...

  7. C#实现Javascript的Splice方法

    最近开始学习Javascript语言,看到splice方法,以下引用其说明:该方法是一个通用删除和插入元素的方法,它可以在数组指定的位置开始删除或插入元素.其包括3个参数:第一个参数指定插入的起始位置 ...

  8. java 并发(五)---AbstractQueuedSynchronizer(3)

           文章代码分析和部分图片来自参考文章 问题 : CountDownLatch  和 CyclicBarrier 的区别 认识 CountDownLatch 分析这个类,首先了解一下它所可以 ...

  9. Python基础学习总结(六)

    8.函数 函数是带名字的代码块,用于完成具体的工作.def函数定义,指出函数名.定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参 ...

  10. MySQL的四种事务隔离级别【转】

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...