ASP.NET MVC 数据验证及相关内容

一、数据验证

数据验证的步骤在模型类中添加与验证相关的特性标记在客户端导入与验证相关的js文件和css文件使用与验证相关的Html辅助方法在服务器端判断是否通过服务器端验证常用的验证标记                    

Required:非空验证StringLength:验证字符串的长度RegularExpression:正则表达式验证Compare:比较两个字段的值是否相等Range:范围验证Remote:服务器验证(需要在controller中编写返回值为JsonResult的Action)自定义验证标记与验证相关的js文件

在ASP.NET MVC中提供了2套验证框架,分别是微软验证框架和jquery验证框架.默认启用了jquery验证框架.

注意:这些js文件的顺序不能颠倒;其中Site.css文件中定义了数据验证使用的样式.

                      

验证相关的Html辅助方法

注意:1.必须使用Html.ValidationMessage()和Html.ValidationMessageFor()来显示验证失效的提示信息;

2.被验证的控件(如文本框\下拉列表框等)必须使用Html辅助方法生成才有效.

                      

在服务器端判断模型是否通过了验证(服务器端验证)

页面中如果使用了MVC验证功能,那么在后台对应的Action中必须通过ModelState.IsValid判断是否通过了服务器端验证。只有通过了服务器端验证,才能执行其他的业务逻辑代码

                      

使用要点:

被验证的标记不能是纯html,必须使用相应的html辅助方法

例如:Html.TextBoxFor(model=>model.UserName),则验证有效;

<input type=”text” id=”UserName” name=”UserName” />,则验证无效;

必须使用相应的html辅助方法显示验证消息(Html.ValidationMessage)被验证的控件必须放在有html.beginform的辅助方法内部(不能是纯<form>标记).客户端验证是不安全的,容易被禁用或欺骗,所以一定要在服务器端判断ModelState.IsValid是否为true.

Action与View的数据传递

在某些情况下,视图需要显示多份数据(比如被修改的员工信息\岗位列表\部门列表),但是Action在返回视图时,View()方法只能传递1个object类型的数据,那么其他的数据该如何传递?

ASP.NET MVC为我们提供了3种方案:ViewData\TempData\ViewBag.

重要提示:在Controller和View中都有这三个属性,在Controller的相应属性中存放了数据后,就可以在View的相应属性中提取这些数据。

ViewData

ViewData是一个字典类型.向里面添加数据时要以键值对的形式添加.

首先在Action中向ViewData中添加,其次就可以在View中访问ViewData来提取数据.

                    

ViewBag

ViewBag是一个动态类型的属性。在ASP.NET MVC 3.0中才加入了ViewBag属性.

动态类型:dynamic,就是可以事先不为其定义属性,通过直接给属性赋值的方式就可以随时为它添加新的属性.

下面的代码演示了向ViewBag中存放cls和stu两个对象,这两个对象分别放到了属性ClassInfo和StudentInfo中。

                    

TempData

TempData的用法和ViewData很相似,都是字典类型.那他们的区别是什么?

ViewData中存储的数据仅仅对本次访问的当前action有效.而TempData中存储的数据,除了对本次访问的当前action有效外,还对本次访问的其他action有效(比如在Action1中向TempData中存放了数据,即使从Action1跳转至Action2后,仍然可以在Action2中从TempData提取数据。而ViewData和ViewBag都无法做到这一点).因此,TempData中数据的生命周期比ViewData|ViewBag中的生命周期要长.

ActionResult的实现类

在ASP.NET MVC模型中,Action用于响应用户的各种请求,比如向客户端返回html文档、html片段、json数据、纯文本、文件等结果。在ASP.NET MVC中通过在Action(行为或操作)方法中返回ActionResult类型的对象来实现向客户端响应上面的各种结果。

ActionResult类是个抽象类(抽象类无法直接被实例化).

ActionResult有很多实现类,不同的实现类用于响应客户端不同的结果。并且在Controller类中提供了大量的辅助方法,这些辅助方法可以快速的创建各种ActionResult.

在实际开发中,我们更多的是使用Controller类中的辅助方法,而非自己手工创建ActionResult的实现类。

ViewResult类

ViewResult类的作用是向客户端响应View目录中一个视图文件.

Controller类中提供了View()方法,来快速的返回一个ViewResult类对象.

ContentResult类

该类用于向客户端返回一段文本内容(纯文本\HTML...).

在Controller类中的辅助方法为:Controller.Content(string content);
                    

RedirectToRouteResult类

该类的作用是从当前action跳转至其他action.

在Controller类中的辅助方法为:RedirectToAction(“ActionName”, “ControllerName”)

RedirectResult类

在服务器端从当前Action跳转到其他URL地址.

在Controller类中的辅助方法为:Controller.Redirect(string url) 

                    

JsonResult类

该类用于向客户端返回一段Json格式的字符串.

在Controller类中的辅助方法为:Controller.Json(object data);

注意:默认情况下mvc拒绝响应以get方式发送的ajax请求,需要使用JsonRequestBehavior.AllowGet。

                    

PartialViewResult类

该类的作用是向客户端响应Views目录的一个分部视图文件。分部视图就是只包含html片段的视图文件.

在Controller类中的辅助方法为:Controller.PartialView();

                    

下图演示了在创建视图文件时,如何创建一个分部视图文件(勾选“创建为分部视图”复选框):

                    

FilePathResult类

该类用于实现文件下载.

在Controller类中的辅助方法为:Controller.File(string filePath, string contentType, string fileName);

                    

FileContentResult类

将内存中的字节数组当做文件数据直接输出到客户端。适合在内存中动态生成文件或将小文件加载到字节数组后输出。

FileStreamResult类

这个方法会先将文件全部读入到服务器内存中,进行缓冲,然后再发送到客户端。这样做会非常消耗服务器内存,因此应避免使用该方法发送大文件。

EmptyResult类

该类用于向客户端响应一个空结果。

HttpStatusCodeResult类

该类用于向客户端相应指定的状态码.

HttpNotFoundResult类就是HttpStatusCodeResult的子类,表示404这一状态码。

下面的是一些常用的http状态码:

404:资源未找到(表示客户端请求服务器的资源地址不存在)

500:服务器内部错误(以5XX开头的表示服务器端在处理过程中出现的错误)

200:成功(表示客户端发送的请求被服务器成功的处理和响应)

其他

如何在aspx页面中导入命名空间?

方式一:在指定的页面添加<%@ Import Namespace=”命名空间” %>

                   

方式二:在项目的web.config配置文件中添加pages---namespaces----add

                   

注:通过方式二添加的命名空间可以在所有的aspx页面中使用;而方式一添加的命名空间只能在当前页面中使用.

时间: 2014-10-24

MVC数据验证详解

一.一般情况 对于使用过MVC框架的人来说,对MVC的数据验证不会陌生,比如,我有一个Model如下: public class UserInfo { [Required(ErrorMessage = "UserName不可为空1111")] public string UserName { get; set; } public string Sex { get; set; } public string Mobile { get; set; } public string Addre

SpringMVC使用@Valid注解进行数据验证的方法

我们在做Form表单提交的时候,只在前端做数据校验是不够安全的,所以有时候我们需要在后端同样做数据的校验.好在SpringMVC在后台验证给我们提供了一个比较好的支持.那就是使用Valid接口的实现类做数据校验.在这之前我们先做一下准备的工作. 添加相关的Maven依赖 我们先把需要的jar包添加进来. <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api<

详解SpringMVC学习系列(6) 之 数据验证

在系列(4).(5)中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 -> 数据验证. 这里我们采用Hibernate-validator来进行验证,Hibernate-validator实现了JSR-303验证框架支持注解风格的验证.首先我们要到http://hibernate.org/validator/下载需要的jar包,这里以4.3.1.Final作为演示,解压后把hibernate-validator-4.3.1.Final.jar.jb

详解SpringMVC学习系列之国际化

在系列(7)中我们讲了数据的格式化显示,Spring在做格式化展示的时候已经做了国际化处理,那么如何将我们网站的其它内容(如菜单.标题等)做国际化处理呢?这就是本篇要将的内容->国际化. 一.基于浏览器请求的国际化实现: 首先配置我们项目的springservlet-config.xml文件添加的内容如下: <bean id="messageSource" class="org.springframework.context.support.ResourceBun

详解 linux mysqldump 导出数据库、数据、表结构

详解 linux mysqldump 导出数据库.数据.表结构 导出完整的数据库备份: mysqldump -h127.0.0.1 -P3306 -uroot -ppassword --add-locks -q dbname > dbname.sql 说明:--add-locks:导出过程中锁定表,完成后回解锁.-q:不缓冲查询,直接导出至标准输出 导出完整的数据库表结构 : mysqldump -h127.0.0.1 -P3306 -uroot -ppassword --add-locks -

详解SpringMVC使用MultipartFile实现文件的上传

如果需要实现跨服务器上传文件,就是将我们本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传.这里是结合SpringMVC+ftp的形式上传的.我们需要先懂得如何配置springMVC,然后在配置ftp,最后再结合MultipartFile上传文件. springMVC上传需要几个关键jar包,spring以及关联包可以自己配置,这里主要说明关键的jar包 1:spring-web-3.2.9.RELEASE.jar (spring的关键jar包,版本可以自己选择) 2:commons-

详解angularjs 学习之 scope作用域

简介 Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个存储应用数据模型的对象,有可用的方法和属性. Scope 可应用在视图和控制器上. 作用域是Web应用的控制器和视图之间的粘结剂: 控制器 --> 作用域 --> 视图(DOM) 指令 --> 作用域 --> 视图(DOM) 当你在 AngularJS 创建控制器时,你可以将 $scope 对象当作一个参数传递: <div ng-controller=

详解Java 集合系列(三)—— LinkedList

LinkedList LinkedList是一种可以在任何位置进行高效地插入和删除操作的有序序列. 它的最基本存储结构是一个节点:每个节点将存储对象,以及前后节点的引用. 结构图 从上面的结构图中,我们可以了解到 ListedList 底层是基于双向链表实现的. 围起来的可以看成 LinkedList 类,它定义了三个 transient 成员变量:first.last.size.这三个变量是整个 LinkedList 类的关键点. 由于是双向链表(每个node都有保存前后节点的引用),因此我们

详解Python学习之安装pandas

一.python pip的安装与使用 1.pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具. Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具. pip 官网:https://pypi.org/project/pip/ 你可以通过以下命令来判断是否已安装: pip --version 2.如果你还未安装,则可以使用以下方法来安装

详解python爬虫系列之初识爬虫

前言 我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识,做网络爬虫还是需要基本的前端的知识的,下面我们进行我们的爬虫讲解 在进行实战之前,我们先给大家看下爬虫的一般讨论,方便大家看懂下面的实例 一.爬汽车之家 汽车之家这个网站没有做任何的防爬虫的限制,所以最适合我们来练手 1.导入我们要用到的模块 import requests from bs4 import BeautifulSo

详解Bootstrap 学习(一)入门

一:什么是Bootstrap? Bootstrap是目前留下的前端框架之一,具备已下特点: 基于HTML.CSS.JavaScript开发的: 样式展现方面定义了大量全局样式.列表.按钮等样式组件: 特效方面实现了轮播.菜单等常用的js控件: 样式采用less编写,js调用了jquery库: 来自Twitter,现在委托保管再github上. Bootstrap适用于网站的开发,不适用于管理系统(例如ERP)开发,它提供的css组件比较多,js控件比较少,因此可以称bootstrap是一套css

详解pandas如何去掉、过滤数据集中的某些值或者某些行?

摘要在进行数据分析与清理中,我们可能常常需要在数据集中去掉某些异常值.具体来说,看看下面的例子. 0.导入我们需要使用的包 import pandas as pd pandas是很常用的数据分析,数据处理的包.anaconda已经有这个包了,纯净版python的可以自行pip安装. 1.去掉某些具体值 数据集df中,对于属性appPlatform(最后一列),我们想删除掉取值为2的那些样本.如何做?非常简单. import pandas as pd df[(True-df['appPlatfor