本系列目录: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. Module-Zero之租户管理

    返回<Module Zero学习目录> 开启多租户 租户实体 租户管理者 默认租户 开启多租户 ABP和Module-Zero可以运行多租户或单租户模式.多租户默认是禁用的.我们可以在mo ...

  2. ORM小练习代码

    DOG类 namespace RupengORM { public class Dog { public Dog() { } /// <summary> /// 显示提供无参构造函数 // ...

  3. 【原】安装Win7和Ubuntu双系统后,Win7耳机无声音的解决办法

    最近安装了Ubuntu的桌面版,作成了双系统,可是发现了一个问题:进入Win7后有时插耳机会没有声音,外放有声音.后来更新驱动也没有解决问题,最后在网上查到了解决办法. 产生原因:进入Ubuntu后, ...

  4. Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析

    这是关于RecyclerView的第二篇,说的是如何自定义Item动画,但是请注意,本文不包含动画的具体实现方法,只是告诉大家如何去自定义动画,如何去参考源代码. 我们知道,RecyclerView默 ...

  5. 2013 duilib入门简明教程 -- 其他 (18)

    一.超链接按钮      代码很简单,参见360Demo:      <Button text="{u}{a}求助{/a}{/u}" showhtml="true& ...

  6. 浏览器执行js代码的机制--对于我们深入了解js有很大的帮助,同时面试时候也都能用得到。

    前端小菜又来了,这些天每天工作,晚上学习太累了.趁星期天给自己放个假.写完这个博客就要出去high了.鸡冻.接下来进入正题啦, 你可能要问,我们学习这个有什么用啊?这样我先给大家来个小小的面试题. a ...

  7. Android_安卓为按钮控件绑定事件的五种方式

    一.写在最前面 本次,来介绍一下安卓中为控件--Button绑定事件的五种方式. 二.具体的实现 第一种:直接绑定在Button控件上: 步骤1.在Button控件上设置android:onClick ...

  8. js实现继承的方式总结

    js实现继承的5种方式 以下 均为 ES5 的写法: js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承 ...

  9. mysql数据库学习目录

    前面的话 对于前端工程师来说,数据库并不是主要技能点,但是基本的增删改查操作还是需要了解的.小火柴将mysql数据库的学习记录整理如下 目录  前端学数据库之基础操作 前端学数据库之数据类型 前端学数 ...

  10. 虚拟 ​router 原理分析- 每天5分钟玩转 OpenStack(101)

    上一节我们创建了虚拟路由器"router_100_101",并通过 ping 验证了 vlan100 和 vlan101 已经连通. 本节将重点分析其中的原理. 首先我们查看控制节 ...