糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > asp绑定gridview属性_理解ASP.NET Core中的模型验证

asp绑定gridview属性_理解ASP.NET Core中的模型验证

时间:2019-06-23 09:51:39

相关推荐

asp绑定gridview属性_理解ASP.NET Core中的模型验证

当MVC执行模型绑定后,为了验证绑定为参数提供的值是否符合预期,还需要进行模型验证。

一、理解模型验证

模型验证是指模型绑定后对Action参数进行验证的过程。它会根据事先定义的规则对参数的值进行验证,验证的结果可以通过ControllerBase类的ModelState属性获取,它的IsValid属性用来说明是否通过验证。

public IActionResult Create(Model model){ if (!ModelState.IsValid) { return View(); } // 通过验证,继续执行后续逻辑}

二、数据注解与验证

设置验证规则最常见的方式是使用数据注解。数据注解包括一系列特性,这些特性均位于ponentModel.DataAnnotations命名空间下。

public class User{ [Required] public int Id { get; set; } [Required, MinLength(2)] public string FirstName { get; set; } [Url] public string Website { get; set; }[DataType(DataType.Password)] public string Password { get; set; }}

上例中用到了一些数据注解特性,如[Required]、[MinLength]、[Url]、[DataType]等,其中[Required]特性要求相应的属性值不能为空,必须提供;[MinLength]则可以指定属性值的最小长度;[Url]特性指明该属性的值必须是一个URL;[DataType]特性用于指明该属性的数据类型。

广告

Docker经典实例

作者:[美]戈阿冈(Sébastien,Goasguen)

京东

除了上面用到的特性外,数据注解还包含很多其他特性,在对用户提交的数据进行验证时,这些特性都非常有用。如果想要查看所有数据注解特性,可查看这里:/dotnet/api/ponentmodel.dataannotations。

在使用数据注解特性时,我们可以为它们指定ErrorMessage属性,用于指明当该属性值验证失败时要显示的错误信息。

[Required(ErrorMessage = "用户名不能为空")][MinLength(2,ErrorMessage="姓名不能少于2个字符")]

当为模型定义了数据注解特性后,为了在Action中验证参数是否符合规则,应首先检查ModelState.IsValid属性。

在视图中,为了显示错误消息,可以添加

或元素,并结合asp-validation-summary以及asp-validation-for标签来分别显示所有错误消息汇总以及针对某个属性的错误消息。

三、自定义验证规则

如果系统提供的验证特性满足不了我们的验证需求, Core允许通过两种方式来创建自定义验证规则,一种是创建继承自ValidationAttribute类的派生类,另一种是使用IValidatableObject接口。

举例来说,如果我们希望Model中某个属性的值必须以固定的字符串开始,则可以定义如下验证特性:

上例中,StartWithAttribute类继承自ValidationAttribute,并且重写了基类的ValidationResult方法,通过返回ValidationResult对象来说明验证是否成功。

提示:ValidationResult方法的ValidationContext参数表示验证上下文,通过它的ObjectInstance属性能够获取当前用于验证的模型(或实体对象)。

接下来,只要像使用系统验证特性一样使用它就可以:

[StartWith(StartValue = "Abc")]

另一种方式使用IValidatableObject接口,要使用这种方式,模型类需要实现这个接口。这个接口包含一个成员:

IEnumerableValidate(ValidationContext validationContext);

具体例子如下:

public class MovieIValidatable : IValidatableObject{ private const int _classicYear = 1960; public int Id { get; set; } [Required] [StringLength(100)] public string Title { get; set; } [Required] public DateTime ReleaseDate { get; set; } [Required] [StringLength(1000)] public string Description { get; set; } [Range(0, 999.99)] public decimal Price { get; set; } [Required] public Genre Genre { get; set; } public bool Preorder { get; set; } public IEnumerable Validate(ValidationContext validationContext) { if (Genre == Genre.Classic && ReleaseDate.Year > _classicYear) { yield return new ValidationResult($"Classic movies must have a release year earlier than {_classicYear}.",new[] { "ReleaseDate" }); } }}

在Validate方法中,我们可以对所有需要自定义验证的属性进行判断、验证,并最终返回一个ValidationResult列表。

比较这两种方法,前一种主要针对一个属性进行验证,而后一种则可以对多个属性集中验证;前一种方法不需要修改模型类的源码(仅需要为属性添加特性),后一种方法则需要修改模型类的源码。具体要使用哪种方法,可根据实际情况而定。

如果觉得《asp绑定gridview属性_理解ASP.NET Core中的模型验证》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。