问题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. Protractor

    官网地址:http://www.protractortest.org/ 1. 预备环境 protractor 是一个 Node.js 程序,为了运行 protractor ,你首先需要 Node 环境 ...

  2. JMeter压力测试以文件的形式

    JMeter压力测试入门教程[图文] 1. 下载JMeter 2. 启动JMeter 3. 运行预准备 4. 运行 文章目录 Apache JMeter是Apache组织开发的基于Java的压力测试工 ...

  3. Mac下导出chrome插件

    chrome最强大的功能之一就是插件,有时候需要给小伙伴们共享一些插件,所以需要将自己chrome中的插件打包,在mac下打包插件还是挺费劲的,在此记录. 打开chrome的扩展程序,找到要导出的插件 ...

  4. Hibernate day04笔记

    整合log4j(了解) slf4j 核心jar : slf4j-api-1.6.1.jar .slf4j是日志框架,将其他优秀的日志第三方进行整合.      整合导入jar包     log4j 核 ...

  5. 开发中model,entity和pojo的区别

    Entity接近原始数据,Model接近业务对象- Entity:是专用于EF的对数据库表的操作, Model:是为页面提供数据和数据校验的,所以两者可以并存 POJO:POJO是Plain Ordi ...

  6. CentOS 问题集锦

    在CentOS 6更新后,不可避免的会在启动选项中产生多个内核选项,一个内核文件大概占100兆左右(一般100M以下),可以使用以下命令进行删除多余的内核. 1.首先列出系统中正在使用的内核: # u ...

  7. asp.net C# 未能加载文件或程序集或它的某一个依赖项。需要强名称程序集。的解决办法

    asp.net C# 未能加载文件或程序集或它的某一个依赖项.需要强名称程序集.的解决办法 出现这个错误是原因:是有签名的DLL引用了无签名的DLL 如上图所示,就是因为引用Entity.MVCEnt ...

  8. Django web 基础

    一.Django概述 Django大而全; 创建Django工程:django-admin startproject sitename 创建django之后生成的目录结构如下: Project Pro ...

  9. [Tomcat 源码分析系列] (附件) : setclasspath.bat 脚本

    @echo off rem Licensed to the Apache Software Foundation (ASF) under one or more rem contributor lic ...

  10. 论velocity在不同后台语言下的不同

    第一家公司使用asp.net开发的,本人从事前端工作.当时用velocity写模板程序记得也没配置啥,我就记得写了rewrite,html页面里头直接写的velocity. 现在公司用的java开发的 ...