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
-----------------------------------------------------------------------------------------
转载与引用请注明出处。
时间仓促,水平有限,如有不当之处,欢迎指正。