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(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)] 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
-----------------------------------------------------------------------------------------
转载与引用请注明出处。
时间仓促,水平有限,如有不当之处,欢迎指正。