在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute?
发布时间:2020-12-16 09:10:08 所属栏目:asp.Net 来源:网络整理
导读:ASP.NET MVC采用System.ComponentModel.DataAnnotations提供的元数据验证机制对Model实施验证,我们可以在Model类型或者字段/属性上应用相应的ValidationAttribute。但是在默认情况下,对于同一个类型的ValidationAttribute特性只允许一个应用到目标元素上—
ASP.NET MVC采用System.ComponentModel.DataAnnotations提供的元数据验证机制对Model实施验证,我们可以在Model类型或者字段/属性上应用相应的ValidationAttribute。但是在默认情况下,对于同一个类型的ValidationAttribute特性只允许一个应用到目标元素上——即使我们将AllowMultiple属性设置为True。这篇文章的目的就是为了解决这个问题。[源代码从这里下载] 一、一个自定义ValidationAttribute:RangeIfAttribute为了演示在相同的目标元素(类、属性或者字段)应用多个同类的ValidationAttribute,我定义了一个名称为RangeIfAttribute特性用于进行“有条件的区间验证”。如下面的代码片断所示,RangeIfAttribute是RangeAttribute的子类,应用在上面的AttributeUsageAttribute特性的AllowMultiple 属性被设置为True。RangeIfAttribute定义了Property和Value两个属性,分别表示被验证属性/字段所在类型的另一个属性名称和相应的值,只有当指定的属性值与通过Value属性值相等的情况下我们在真正进行验证。具体的验证逻辑定义在重写的IsValid方法中。 1: [AttributeUsage( AttributeTargets.Field| AttributeTargets.Property,AllowMultiple = true)] 3: { 5: string Value { get; set; }
7: : base(minimum,maximum)
9: this.Property = property;
11: } 13: { 15: propertyValue = propertyValue ?? "";
17: { 19: } 21: { 24:? 26: new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName),memberNames); 28: } 二、将RangeIfAttribute应用于Employee我们将RangeIfAttribute特性应在具有如下定义的表示员工的Employee类型的Salary(表示薪水)属性上,另外一个属性Grade表示员工的级别。应用在Salary属性上的RangeIfAttribute特性体现了基于级别的薪水区间验证规则:对于G7、G8和G9的员工,其薪水分别在2000~3000,3000~4000和4000~5000范围内。 2: { string Grad { get; set; } 6: [RangeIf("G8",3000,4000)]
8: decimal Salary { get; set; }
class EmployeeController : Controller 4: { 6: } 8: [HttpPost] 10: { 12: { 14: new Employee());
else 21:? 1: @model MultipleValidator.Models.Employee 3: ViewBag.Title = "Employee Management";
5: @Html.ValidationSummary(true)
7: { 9: <input type="submit" value="Save" /> //其他成员 override object TypeId
8: get 10: return (null == typeId) ? (typeId = object()) : typeId; 12: } 相关内容
推荐文章
站长推荐
热点阅读
|