一、数据验证

数据验证的步骤

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

常用的验证标记

                    

  • 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判断是否通过了服务器端验证。只有通过了服务器端验证,才能执行其他的业务逻辑代码

                      

使用要点:

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

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

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

  1. 必须使用相应的html辅助方法显示验证消息(Html.ValidationMessage)
  2. 被验证的控件必须放在有html.beginform的辅助方法内部(不能是纯<form>标记).
  3. 客户端验证是不安全的,容易被禁用或欺骗,所以一定要在服务器端判断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页面中使用;而方式一添加的命名空间只能在当前页面中使用.

ASP.NET MVC进阶二的更多相关文章

  1. ASP.NET MVC进阶

    ASP.NET MVC进阶 一.ASP.NET MVC中的AJAX应用 首先,在ASP.NET MVC中使用自带的ajax功能,必须要导入2个js文件(顺序不能颠倒): ASP.NET MVC提供了2 ...

  2. ASP.NET MVC 视图(二)

    ASP.NET MVC 视图(二) 前言 上篇中对于视图引擎只是做了简单的演示,对于真正的理解视图引擎的工作过程可能还有点模糊,本篇将会对由MVC框架提供给我们的Razor视图引擎的整个执行过程做一个 ...

  3. ASP.NET MVC 路由(二)

     ASP.NET MVC路由(二) 前言 在上一篇中,提及了Route.RouteCollection对象的一些信息,以及它们的结构所对应的关系.按照处理流程走下来还有遗留的疑问没有解决这个篇幅就来讲 ...

  4. Asp.Net MVC 进阶篇:路由匹配 实现博客路径 和文章路径

    Asp.Net MVC 进阶篇:路由匹配 实现博客路径 和文章路径 我们要实现 通过路由 匹配出 博客地址 和博客文章地址 例如下面的这两个地址 //http://www.cnblogs.com/ma ...

  5. ASP.NET MVC进阶三

    一.ASP.NET MVC中的AJAX应用 首先,在ASP.NET MVC中使用自带的ajax功能,必须要导入2个js文件(顺序不能颠倒): ASP.NET MVC提供了2个常用的ajax辅助方法. ...

  6. 白话ASP.NET MVC之二:Controller激活系统的概览

    前文简介:我们抽象类路由规则的对象,RouteBase是路由对象的抽象基类,ASP.NET 的路由系统中有唯一一个从RouteBase继承的路由对象,那就是Route类型了.我们注册了路由对象Rout ...

  7. ASP.NET MVC教程二:ASP.NET MVC应用程序结构详解

    在上一篇文章中,讲解了一些MVC的概念,并且创建了第一个ASP.NET MVC项目,这篇文章将讲解ASP.NET MVC程序中的代码解构,新创建的MVC应用程序解构如下图所示: 一.App_Data ...

  8. 跟我学ASP.NET MVC之二:第一个ASP.NET MVC程序

    摘要: 本篇文章带你一步一步创建一个简单的ASP.NET MVC程序.  创建新ASP.NET MVC工程 点击“OK”按钮后,打开下面的窗口: 这里选择“Empty”模板以及“MVC”选项.这次不创 ...

  9. ASP.NET MVC 4 (二)控制器

    MVC中控制器负责处理请求,由它操作数据模型,最后返回视图给用户. IController接口 所有的控制器类以Controller结尾,必须实现System.Web.Mvc.IController接 ...

随机推荐

  1. android 中handler的用法分析 (二)

    .Looper 的构造方法是私有的,不能在package外面直接初始化.一般通过Looper.prepare()初始化.Looper.myLooper()获取.2.Looper 中的静态变量 Thre ...

  2. 教你在Excel里做GA的水平百分比图的详细步骤(图文教程)-成为excel大师(1)

    GA报表除了默认的表格方式显示数据外,还支持饼图,水平百分比图,数据透视图等展现方式,其中水平百分比图在可视化看流量时最为方便,就像这样: 那么当我们要在Excel里做类似的效果应该怎么做呢?尤其是数 ...

  3. 气球或者泡泡向上飘动 jQuery插件

    圣诞.元旦要来了,公司以往基本每个月至少要搞一两款手机小游戏来宣传产品,这次也不例外!! 之前做过,按压柚子.许愿.吃柚子等等小游戏,这次是做个那种 气球向上飘动,戳破气球,随机获取奖品.如下图: 手 ...

  4. 注解Annotation 详解(转)

    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...

  5. C++ Copy Elision

    故事得从 copy/move constructor 说起: The default constructor (12.1), copy constructor and copy assignment ...

  6. smartjs 0.2 OOP讲解 - factory

    本篇介绍OOP的第二个对象factory.在以往项目中其实真正使用klass的地方相当少,而factory则是十分常见的. 在smartjs中的factory并不是指的是工厂模式.在factory要求 ...

  7. 解决mysql“Access denied for user 'root'@'localhost'”

    解决mysql“Access denied for user 'root'@'localhost'” 分类: linux 2011-01-14 00:23 147547人阅读 评论(3) 收藏 举报 ...

  8. (转) IPv6相关RFC

    转自http://blog.csdn.net/lucien_cc/article/details/12688477 IPv6 Spec RFC 2460 : Internet Protocol, Ve ...

  9. codeforces C. Diverse Permutation(构造)

    题意:1...n 的全排列中 p1, p2, p3....pn中,找到至少有k个 |p1-p2| , |p2-p3|, ...|pn-1 - pn| 互不相同的元素! 思路: 保证相邻的两个数的差值的 ...

  10. DDD:Strategic Domain Driven Design with Context Mapping

    Introduction Many approaches to object oriented modeling tend not to scale well when the application ...