问题1:View层如何向Controller的Action传递Model数据?
在View中,可以使用Form表单进行模型数据的提交,同样的,我们需要关联提交数据的类型,则需要在View中使用@model + 数据类型
不同的是,此时Model属性为null,而且Model是一个只读属性,我们不能使用它来存储数据,此时应该使用形式参数来接收客户端填写的值。
形式参数的名称可以自己定义,其类型已经是明确的了,就是我们上变关联的数据类型。例子:上一篇文章的Person类
@model MVCTest.Models.Person

@{
    ViewBag.Title = "Create";
}
<h2>Create</h2>

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

<fieldset>
        <legend>Person</legend>

<div class="editor-label">
            @Html.LabelFor(aa => aa.IdCard)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.IdCard)
            @Html.ValidationMessageFor(model => model.IdCard)
        </div>

<div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>

<div class="editor-label">
            @Html.LabelFor(model => model.Sex)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Sex)
            @Html.ValidationMessageFor(model => model.Sex)
        </div>

<div class="editor-label">
            @Html.LabelFor(model => model.Age)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Age)
            @Html.ValidationMessageFor(model => model.Age)
        </div>

<p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
HtmlHelper类的使用将在以后作详细介绍,此处不做重点关注。注意点:有时候在进行传值的时候,需要考虑形参与实参名字的一致性(大小写忽略不计)

此处需要明确的一点是:submit是直接将数据提交到与该视图同名的Action中,所以在对应的控制器中,该Action方法可能会有重载的方式。

此外,除了form表单之外,我们也可以使用HtmlHelper类中的@HTML.ActionLink(string LinkText,string ActionName,object parameter)的形式向
本控制器下的ActionName提交object 类型的parameter,采用这种方式的时候,需要在View中添加@using + Model所在命名空间,并且需要定义出该类的实例,

问题2:如何使用Model层的数据验证?
MVC为我们提供了基于特性的数据验证,这些验证特性全部位于System.ComponentModel.DataAnnotations命名空间下且继承自ValidationAttribute基类
这也说明了,如果我们需要自定义验证特性,则需要继承自该类或该类的子类,关于自定义验证特性,后边再作介绍。
先为我们的Person类添加一些验证特性,代码如下:
  public class Person
    {
        [DisplayName("编号")]
        [Required(ErrorMessage="编号不能为空")]
        [RegularExpression("00\\d*",ErrorMessage="编号必须以00开始")]
        public string IdCard { get; set; }

[DisplayName("姓名")]
        [Required]
        [StringLength(3,ErrorMessage="姓名最多为3个汉字")]
        public string Name { get; set; }

[DisplayName("性别")]
        [RegularExpression("男|女",ErrorMessage="性别错误!男/女")]
        public string Sex { get; set; }

[DisplayName("年龄")]
        [Range(0,150,ErrorMessage="年龄应在0-150岁之间")]
        public int Age { get; set; }
    }
   然后 在客户端(View层)进行验证,需要通过下面步骤:
    第一步:配置web.config,开启javascript客户端验证
    <appSettings>
     <add key="ClientValidationEnabled" value="true"/>
     <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    </appSettings>
    第二步:在需要验证的视图中引进两个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>
    这样做了之后运行,会报错:在我们引进的两个js文件中Jquery没有定义,这是因为没有引进Jquery.js文件且该文件必须第一个被引用
    在两个js脚本之前再添加一个引用:
    <script src="@Url.Content("~/Scripts/jquery-1.8.2.js")" type="text/javascript"></script>
    添加完后再运行,就不会报错了。

运行之后的效果是这样的:

红色字体可以自己添加和<font>标签进行实现

到这里,我们知道了View想Action传值的方式,也知道了可以实例Model层的数据验证的客户端完成一些验证,但是,Model层的验证方式有哪些?使用的时候需要注意什么,这些将在下一篇中介绍

Model层数据验证的更多相关文章

  1. MetadataType的使用,MVC的Model层数据验证

    MetadataType的使用,MVC的Model层数据验证 指定要与数据模型类关联的元数据类   using System.ComponentModel.DataAnnotations; //指定要 ...

  2. 【转】METADATATYPE的使用,MVC的MODEL层数据验证

    http://www.cnblogs.com/chshnan/archive/2011/07/08/2100713.html MetadataType的使用,MVC的Model层数据验证指定要与数据模 ...

  3. MVC进阶篇(三)——model层数据验证

    前言 常常在想,姓名性别那些个验证,真的有必要每次遇到,每次写验证吗?好麻烦,于是学到MVC这里,发现MVC自带数据验证,这个东西着实是个好东西.我写了一个小demo,分享给大家. 内容 一个表单的提 ...

  4. ASP.NET MVC中对Model进行分步验证的解决方法

    原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...

  5. ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则

    原文:ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则 对于Model验证,理想的设计应该是场景驱动的,而不是Model(类型)驱动的,也就是对于同一个Model对象, ...

  6. Model Validation(模型验证)

    Model Validation(模型验证) 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/344 ...

  7. 第十节:数据批注(DataAnnotationModel)和自定义验证(包括Model级别的验证)

    一. 简介 写完上一个章节MVC中的常用特性,迫不及待将该系列补全,该章节主要介绍数据批注(也叫:注解). 一听[数据批注],好高大上的名字,但仔细一看,它们其实是[System.ComponentM ...

  8. 10、ASP.NET MVC入门到精通——Model(模型)和验证

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 模型就是处理业务,想要保存.创建.更新.删除的对象. 注解(通过特性实现) DisplayName Required StringLengt ...

  9. sencha touch Model validations 自定义验证 二选一输入验证、重复验证、时间验证、比较验证、条件验证(2015-1-14)

    项目初始化时执行以下代码 //重写模型,方便进行自定义验证 Ext.define("Ext.zh.data.Model", { override: "Ext.data.M ...

随机推荐

  1. centos 用dvd创建yum 仓库

    环境:CentOS 6.0 默认的yum是以网络来安装的,在没有网络或者网速不佳的情况下,通过yum来安装软件是意见非常痛苦的事情.其实对于CentOS DVD来说,里面提供的软件就足以满足我们的需要 ...

  2. Ibatis 测试出SQL

    String sql = Brg.Global.Map.BaseBatis.GetRuntimeSql("select_T_JewelleryProductType", _Mode ...

  3. php与ascii码

    首先 简单说一下历史,ascii码最开始是美国人搞出来的,用来干什么呢?我们知道,计算机只知道0和1,如果我们要计算机识别除了01之外的字符,例如 'a',我们要先告诉计算机‘1100001’就是'a ...

  4. Oracle SQL: TO_CHAR and TO_NUMBER 笔记

    (1)select TO_CHAR(123.56,'999.9') from dual; will return 123.6select TO_NUMBER('123.56','999.9') fro ...

  5. Apache(ApacheHaus)安装配置教程

    1,Apache下载 选择一个版本,点击Download 点击File For Microsoft Windows 由于Apache HTTP Server官方不提供二进制(可执行)的发行版,所以我们 ...

  6. Linux_07------Linux的用户和用户组管理

    段 * 用户名:密码占位符:用户编号:用户组编号:用户注释信息:用户主目录:shell类型 * 每一行对应一个用户 * * /etc/shadow 存储用户密码 * 与passwd配置文件一一对应, ...

  7. VC++ chap13 文档与串行化

    Lesson 13 文档与串行化 13.1使用CArchive类对文件进行读写操作 //让对象数据持久性的过程称之为串行化,或者序列化 void CGraphicView::OnFileWrite() ...

  8. VC++ 标准C++中的string类的用法总结

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

  9. Ubuntu-12.04-server 配置修改静态 IP地址

    前几天在装Ubuntu 12.04 Server版系统的服务器时IP地址写错了,导致服务器不能上网,今天重新修改了一下IP地址,这里做一个总结. 1.配置静态IP地址 sudo vi /etc/net ...

  10. php.ini 不生效问题extension

    date.timezone = PRC extension_dir = "ext"