1 ViewModel
是一种专门提供给View使用的模型,使用ViewModel的理由是实体或领域模型所包含的属性比View使用的多或少,这种情况下实体或领域模型不适合View使用。
2模型绑定
默认模型绑定器
通过DefaultModelBinder解析客户端传来的数据,为控制器的操作参数列表赋值。
显示模型绑定
使用UpdateModel和TryUpdateModel显示绑定模型,不会检验未绑定字段。
使用UpdateModel方法绑定模型时,如果绑定失败就会抛异常,而TryUpdateModel不会。
验证模型绑定成功与否
使用ModelState.IsValid
获取表单数据
为获得表单数据,使用类型为FormCollection的参数作为操作参数。
清空模型绑定状态
使用ModelState.Clear();清空模型绑定状态以后,验证失败的信息就不会显示到视图上,即使在视图中使用@Html.ValidationSummary()方法。
限制默认的绑定规则
使用BindAttribute属性修饰参数或操作。
public class MyModel
{
public string Filed1 { set; get; }
public string Filed2 { set; get; }
} public ActionResult About([Bind(Include = "Filed1")]MyModel mm)
{
//具体代码
} 或
[Bind(Include = "Filed1")]
public ActionResult About(MyModel mm)
{
//具体代码
}
3 模型修饰
在模型属性上使用一些特性,达到修饰模型属性或验证属性的目的
特性名称 |
描述 |
备注 |
StringLength |
设置字符串允许的最大长度 |
|
Required |
标记字段为必填字段 |
|
RegularExpression |
必须满足指定的正则表达式 |
|
Range |
规定数字的范围 |
|
CustomValidation |
自定义验证规则 |
|
DisplayName |
设置字段的显示名称 |
|
Compare |
比较两个字段是否一致 |
可用于确认第二次输入是否与第一次一致 |
MinLength |
设置数组或字符串最小长度 |
|
MaxLength |
设置数组或字符串最大长度 |
|
Remote |
通过控制器操作验证指定字段 |
public RemoteAttribute(string action, string controller); |
例:
1)指定许可的范围
public class ModelF
{
public string Field { get; set; } [Range(typeof(DateTime), "1/1/2018", "1/1/2019")]
public DateTime Field2 { get; set; }
}
2)使用占位符
[StringLength(, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = )]
public string NewPassword { get; set; }
4扩展
自定义注解
创建自定义特性,继承自ValidationAttribute,ValidationAttribute有两个虚方法,可以通过重载这两个虚方法来完成自定义验证逻辑。
public virtual bool IsValid(object value);
protected virtual ValidationResult IsValid(object value, ValidationContext validationContext);
例:
public class CustomValidationAttribute : ValidationAttribute
{
public CustomValidationAttribute()
: base("{0} 验证失败的缘由")
{ }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
//验证逻辑 //验证失败,返回错误信息
string errorMessage = FormatErrorMessage(validationContext.DisplayName);
return new ValidationResult(errorMessage); }
return ValidationResult.Success;
}
}
5 原理
传入操作的数据存在于HTTP请求的请求URL,消息头,消息体。当操作带有参数时,MVC框架使用模型绑定器(默认的或自定义的)在Http请求中查找数据,用于构建控制器操作的参数列表。
验证发生的时间
模型验证是在操作执行之前完成的。当模型绑定器使用新值对模型属性更新后,会利用当前模型元数据获得模型验证器,模型验证器会找到所有施加于模型属性的特性并执行验证逻辑,然后模型绑定器会捕获所有失败的验证规则,并将它们放入模型状态中。
模型状态
模型状态包含了模型绑定期间绑定的值,和模型绑定期间发生的任何错误。
参考:
1.Jess Chadwick/Todd Snyder/Hrusikesh Panda,徐雷/徐扬
译。ASP.NET MVC4 Web编程
2.Jon Galloway/Phil Haack/Brad Wilson/K. Scott Allen,孙远帅/邹权译 ASP.NET MVC4 高级编程(第四版)
3.黄保翕,ASP.NET MVC4开发指南
4.蒋金楠,ASP.NET MVC4框架揭秘
5.https://www.asp.net/mvc
转载与引用请注明出处。 时间仓促,水平有限,如有不当之处,欢迎指正。
ASP.NET MVC编程——模型的更多相关文章
-
MVC编程模型
MVC 编程模型 MVC 是三个 ASP.NET 开发模型之一. MVC 是用于构建 web 应用程序的一种框架,使用 MVC (Model View Controller) 设计: Model(模型 ...
-
ASP.NET MVC 编程参考
ASP.NET MVC 编程参考 转载请注明出处:http://surfsky.cnblogs.com MVC 参考 http://msdn.microsoft.com/zh-cn/dd40 ...
-
ASP.NET MVC数组模型绑定
在ASP.NET MVC中使用Razor语法可以在视图中方便地展示数组,如果要进行数组模型绑定,会遇到索引断裂问题,如下示例: <input type="text" name ...
-
MVC 编程模型及其变种
MVC 编程模型及其变种 MVC全称是Model View Controller, 这是一个模型(model)-查看(view)-调节器(controller)缩写,这是通过通用的编程模型非.MVC当 ...
-
asp.net MVC 自定义模型绑定 从客户端中检测到有潜在危险的 Request.QueryString 值
asp.net mvc 自定义模型绑定 有潜在的Requset.Form 自定义了一个模型绑定器.前端会传过来一些敏感字符.调用bindContext. valueProvider.GetValue( ...
-
ASP.NET MVC编程——视图
1Razon语法 使用@符号后接C#或VB.NET语句的方式. 基本规则 1)变量 @后直接变量即可 2)代码块 为使用表达式或多行代码,@后跟大括号将多行代码包括在大括号中 3)"+&qu ...
-
ASP.NET MVC编程——错误处理与日记
ASP.NET MVC的错误处理应考虑到这几个方面:模型绑定期间发生的错误,未能路由到指定操作,针对控制器的错误处理.使用配置文件可以帮助我们处理异常,但是不够灵活和全面:使用HandleErrorA ...
-
ASP.NET MVC编程——单元测试
1自动化测试基本概念 自动化测试分为:单元测试,集成测试,验收测试. 单元测试 检验被测单元的功能,被测单元一般为低级别的组件,如一个类或类方法. 单元测试要满足四个条件:自治的,可重复的,独立的,快 ...
-
ASP.NET MVC编程——路由
框架自动生成的路由配置 上图中,路由配置文件为App_Start文件夹下的RouteConfig.cs. 代码如下: public class RouteConfig { public static ...
随机推荐
-
java代码实现打包多个文件下载功能
//传入对应的需要打包的file 集合对象 //文件打包下载 public static HttpServletResponse downLoadFiles(List<File> ...
-
hdu4745
区间DP,这类题目还是非常常见的,可惜平时都不怎么在意.一到比赛就弱得像鸟一样,真心囧. 题目要求很简单,就是一个最长的回文子序列,输出该子序列的长度. 区间DP,最常用的一种策略(类似于数学归纳法) ...
-
Swift - 给图片添加滤镜效果(棕褐色老照片滤镜,黑白滤镜)
Core Image是一个强大的滤镜处理框架.它除了可以直接给图片添加各种内置滤镜,还能精确地修改鲜艳程度, 色泽, 曝光等,下面通过两个样例演示如何给UIImage添加滤镜. 1,棕褐色滤镜 - ...
-
c#通用配置文件读写类(xml,ini,json)
.NET下编写程序的时候经常会使用到配置文件.配置文件格式通常有xml.ini.json等几种,操作不同类型配置文件需要使用不同的方法,操作较为麻烦.特别是针对同时应用不同格式配置文件的时候,很容易引 ...
-
Jmeter二次开发代码(1)
package org.apache.jmeter.functions; import java.util.Collection;import java.util.LinkedList;import ...
-
代码生成器——实现生成pojo,sql,mapper接口
代码生成器(记录一次兴趣代码,多多指教.转载请标明作者) 在我们开始实现代码生成器之前我们先来对代码生成器有一个简单的了解. 1.什么是代码生成器? 故名思义,也就是生成代码的一个程序.那它是一个什么 ...
-
(记忆化搜索)Jury Compromise (poj 1015)
http://acm.fzu.edu.cn/problem.php?pid=1005 Description The fastfood chain McBurger owns several rest ...
-
C语言中几种类型所占字节数
其实C标准并没有具体给出规定哪个基本类型应该是多少个字节数,而且这个也与OS.编译器有关,比如同样是在32位操作系统,VC++的编译器下int类型为4个字节,而在tuborC下则是2个字节. 下面给出 ...
-
查看Window系列本地账户密码
mimikatz,很出名的查看Window本地账户密码(经测试,不支持探测Window在线账户认证密码的探测) github: https://github.com/gentilkiwi/mimika ...
-
Indexes (also called “keys” in MySQL)
High Performance MySQL, Third Edition by Baron Schwartz, Peter Zaitsev, and Vadim Tkachenko Is an ...