问题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. 11.tftp和nfs服务器

    宿主机产生嵌入式软件的机器 运行程序的是目标机上运行 基于网络的下载 目标机通过tftp下载到目标机 1. 安装tftp依赖xinetd [root@cfm880 Packages]# rpm -iv ...

  2. CSS的相对定位和就对定位

    1.元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,top这些偏移属性都是没有效果的, 使用相 ...

  3. Entity Framwork(EF) 7——在现在数据库的甚而上开发MVC 新项目

    一.开发背景: 由于老系统已经无法满足实际业务需求,需在现有数据库的甚而上开发新的项目. 二.困难点: 而EF默认情况下是要删除现有数据库表格后重新创建,这是不允许的.当你创建数据库对象时系统会提示“ ...

  4. App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.-解决办法

    运行环境:Xcode Version 7.3.1 (7D1014) 使用NSURL进行数据请求数据代码: -(NSData *)requestData{ NSURL *url = [NSURL URL ...

  5. shell_基础知识

    参考: http://blog.csdn.net/kaizi318/article/details/9343551 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告 ...

  6. 设置PATH变量

    一不小心把PATH变量清空了,所有的命令都执行不了了,提示“xxx: command not found”,解决办法:在命令行输入export PATH=/usr/local/sbin:/usr/lo ...

  7. oracle 客户端重新安装遇到的问题

    前一阵,因为把ORACLE客户端的密码忘记了,在网上也找了好多方法,试着不重新安装找回密码,可是都行不通,没有办法重新装.安装时遇到一些问题,因为我是WIN7,64位系统,安装的oracle11g64 ...

  8. git常用操作

    批量删除以bran开头的本地分支 git branch |grep 'bran'|xargs git branch -d

  9. java打包遇到问题java.io.IOException: invalid header field

    问题:java打包时报以下错误 $ jar -cvmf main.txt test.jar Shufile1.class java.io.IOException: invalid header fie ...

  10. Bash Shell实用快捷键

    Ctrl-D 相当于Del键,即删除光标所在处的字符 Ctrl-E 相当于End键,即将光标移动到本行末尾 Ctrl-K 用于删除从光标处开始到结尾处的所有字符 Ctrl-L 清屏,相当于clear命 ...