本系列目录: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(,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

<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 == "" ? Json(true,JsonRequestBehavior.AllowGet) : Json(false,JsonRequestBehavior.AllowGet);
}

效果:

10、ASP.NET MVC入门到精通——Model(模型)和验证的更多相关文章

  1. 25、ASP.NET MVC入门到精通——Spring.net-业务层仓储

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...

  2. 26、ASP.NET MVC入门到精通——后台管理区域及分离、Js压缩、css、jquery扩展

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱 ...

  3. 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC.从下图可以看到ASP.NET WebFo ...

  4. 22、ASP.NET MVC入门到精通——搭建项目框架

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 前面的章节,说了ASP.NET MVC项目中常用的一些技术和知识点,更多的是理论上面的东西,接下来,我将通过一个简单的OA项目来应用我们之前 ...

  5. 24、ASP.NET MVC入门到精通——数据库仓储

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 业务层调用数据层对象,我不想每次都new一个数据层对象,而是在数据层创建一个仓储,统一管理所有的对象调用. 1.在IDAL项目中,新建IDB ...

  6. 8、ASP.NET MVC入门到精通——View(视图)

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 View视图职责是向用户提供界面.负责根据提供的模型数据,生成准备提供给用户的格式界面. 支持多种视图引擎(Razor和ASPX视图引擎是官 ...

  7. 9、ASP.NET MVC入门到精通——Controller(控制器)

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 Controller主要负责响应用户的输入.主要关注的是应用程序流,输入数据的处理,以及对相关视图(View)输出数据的提供. 继承自:Sy ...

  8. 11、ASP.NET MVC入门到精通——AspnetMVC分页

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 说起分页,这基本上是我们Web开发中遇见得最多的场景,没有之一,可即便如此,要做出比较优雅的分页还是需要技巧的.这里我先说一种ASP.NET ...

  9. 12、ASP.NET MVC入门到精通——HtmlHelper

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 HtmlHelper:是为了方便View的开发而产生 HtmlHelper的演变 普通首页超级链接为:<a href="/h ...

随机推荐

  1. C语言 · 冒泡排序

    for(int k=0;k<N;k++) {  for(int j=k+1;j<N;j++){    if(a[k]>a[j]){      int t = a[k];      a ...

  2. Directive间的通信

    Directive间的通信 源自大漠的<AngularJS>5个实例详解Directive(指令)机制 这个例子主要的难点在于如何在子Expander里面访问外层Accordion的sco ...

  3. mac下tomcat的安装与配置

    1.到 apache官方主页 下载 Mac 版本的完整 tar.gz文件包.解压拷贝到 /Library目录下,并命名为Tomcat,其他目录也可.   2.修改目录权限 到终端输入 sudo chm ...

  4. Leetcode-463 Island Perimeter

    #463. Island Perimeter You are given a map in form of a two-dimensional integer grid where 1 represe ...

  5. SqlServer性能检测和优化工具使用详细

    工具概要 如果你的数据库应用系统中,存在有大量表,视图,索引,触发器,函数,存储过程,sql语句等等,又性能低下,而苦逼的你又要对其优化,那么你该怎么办?哥教你,首先你要知道问题出在哪里?如果想知道问 ...

  6. C#单例模式详解

    C#要实现单例模式必须要有以下三点: 声明私有静态成员.私有化构造函数.静态函数返回实例. private static GameManager s_GameManager=null; private ...

  7. 深入理解ajax系列第一篇——XHR对象

    × 目录 [1]创建对象 [2]发送请求 [3]接收响应[4]异步处理[5]实例演示 前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的java ...

  8. 创建 flat network - 每天5分钟玩转 OpenStack(87)

    上一节我们讨论了 flat network 的原理,今天就来创建 "flat_net" 并分析底层网络的实现. 打开菜单 Admin -> Networks,点击 “Crea ...

  9. Hawk: 20分钟无编程抓取大众点评17万数据

    1. 主角出场:Hawk介绍 Hawk是沙漠之鹰开发的一款数据抓取和清洗工具,目前已经在Github开源.详细介绍可参考:http://www.cnblogs.com/buptzym/p/545419 ...

  10. php对文本文件进行分页功能简单实现

    php对文本文件进行分页功能简单实现 <!DOCTYPE> <html> <head> <meta http-equiv="Content-type ...