首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何强制派生ValidationAttribute的数据绑定验证调用IsValid(object,ValidationContext)而不是IsValid(object)

在ASP.NET中,可以通过派生ValidationAttribute类来创建自定义的数据绑定验证规则。默认情况下,数据绑定验证调用的是IsValid(object)方法,但是我们可以通过重写IsValid(object,ValidationContext)方法来实现强制调用该方法。

具体步骤如下:

  1. 创建一个新的类,继承自ValidationAttribute类,并重写IsValid(object,ValidationContext)方法。在该方法中,可以编写自定义的验证逻辑。
代码语言:txt
复制
using System.ComponentModel.DataAnnotations;

public class CustomValidationAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        // 自定义验证逻辑
        // ...

        // 返回验证结果
        return ValidationResult.Success;
    }
}
  1. 在需要应用验证的属性上,使用自定义的验证特性。
代码语言:txt
复制
public class MyClass
{
    [CustomValidation]
    public string MyProperty { get; set; }
}
  1. 在数据绑定时,调用IsValid(object,ValidationContext)方法进行验证。
代码语言:txt
复制
var myObject = new MyClass();
var validationContext = new ValidationContext(myObject, null, null);
var validationResults = new List<ValidationResult>();

Validator.TryValidateObject(myObject, validationContext, validationResults, true);

在上述代码中,Validator.TryValidateObject方法会调用IsValid(object,ValidationContext)方法进行验证,并将验证结果存储在validationResults列表中。

需要注意的是,IsValid(object,ValidationContext)方法的第一个参数是要验证的对象,第二个参数是ValidationContext对象,它提供了有关验证的上下文信息,例如属性名称、对象实例等。

这样,我们就可以强制调用IsValid(object,ValidationContext)方法进行数据绑定验证,而不是默认的IsValid(object)方法。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云云数据库MySQL、腾讯云云原生容器服务(TKE)等。你可以通过访问腾讯云官方网站获取更多关于这些产品的详细信息和文档。

腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET MVC基于标注特性Model验证ValidationAttribute

五、应用ValidationAttribute特性唯一性 一、ValidationAttribute特性 与通过数据标注特性定义Model元数据类似,我们可以在作为Model数据类型及其属性上应用相应标注特性来定义...ValidationContextDisplayName属性将会作为调用FormatErrorMessage参数,该方法调用得到完整错误消息将会作为ValidationResultErrorMessage...我们也可以调用Validate方法验证某个指定对象,该方法在验证失败情况下会直接抛出一个ValidationException异常,作为该异常消息是通过调用FormatErrorMessage方法...这些预定义验证特性不是本篇文章论述重点,所以我们在这里只是对它们作一个概括性介绍: RequiredAttribute:用于验证必需数据字段。...这就意味着对于多个应用到相同目标元素同类ValidationAttribute,有且只有一个是有效。那么如何来解决这个问题呢?

1.7K110
  • 09:数据标注与数据校验

    用途主要可以分为下面这三类: 验证 Validation:向数据添加验证规则 展现 Display:指定数据如何呈现给用户 模型 Modelling:添加关于用法和与其它类关系信息 下面是一个用来验证和展现用户信息一个...数据标注用来验证数据合法性是最常见用法,在 ASP.NET Core/Mvc 中,数据作为表单 Model 提交时,框架会对 Model 数据自动进行校验,也可以手动调用 ModelState.IsValid...自定义校验特性 自定义一个校验特性很简单,创建一个继承 ValidationAttribute 类,然后重写它 IsValid 方法。...(objectToValidate.PropertyToValidate, vc, results, true); 返回值 isValid 表示是否所有数据验证通过,验证失败信息会放到 results...看到这,我觉得手动执行校验还是有点麻烦,创建 ValidationContext 对象这一步如果也封装在 Validator 类方法内,岂不是简洁一些?

    88040

    ASP.NET MVC编程——模型

    验证模型绑定成功与否 使用ModelState.IsValid 获取表单数据 为获得表单数据,使用类型为FormCollection参数作为操作参数。...public virtual bool IsValid(object value); protected virtual ValidationResult IsValid(object value, ValidationContext...ValidationResult IsValid(object value, ValidationContext validationContext) { if...当操作带有参数时,MVC框架使用模型绑定器(默认或自定义)在Http请求中查找数据,用于构建控制器操作参数列表。 验证发生时间 模型验证是在操作执行之前完成。...当模型绑定器使用新值对模型属性更新后,会利用当前模型元数据获得模型验证器,模型验证器会找到所有施加于模型属性特性并执行验证逻辑,然后模型绑定器会捕获所有失败验证规则,并将它们放入模型状态中。

    2.4K80

    在ASP.NET MVC中如何应用多个相同类型ValidationAttribute

    ASP.NET MVC采用System.ComponentModel.DataAnnotations提供数据验证机制对Model实施验证,我们可以在Model类型或者字段/属性上应用相应ValidationAttribute...[源代码从这里下载] 一、一个自定义ValidationAttribute:RangeIfAttribute 为了演示在相同目标元素(类、属性或者字段)应用多个同类ValidationAttribute...具体验证逻辑定义在重写IsValid方法中。...(object value, ValidationContext validationContext) 13: { 14: object propertyValue =...ASP.NET MVC在生成包括验证特性Model数据时候,针对某个元素所有ValidationAttribute是被维护在一个字典上,而这个字典值就是AttributeTypeId属性

    2.1K60

    ASP.NET MVC下四种验证编程方式

    数据类型实现IDataErrorInfo接口 一、手工验证绑定参数 在定义具体Action方法时候,对已经成功绑定参数实施手工验证无疑是一种最为直接编程方式,接下来我们通过一个简单实例来演示如何将参数验证逻辑实现在对应...二、使用ValidationAttribute特性 将针对输入参数验证逻辑和业务逻辑定义在Action方法中并不是一种值得推荐编程方式。...ValidationAttribute特性,并利用它们对提供数据实施验证,所以我们不再需要像上面演示实例一样自行在Action方法中实施验证只需要在定义参数类型Person时候应用相应ValidationAttribute...由于ASP.NET MVC会自动提取应用在绑定参数类型上ValidationAttribute特性对绑定参数实施自动化验证,所以我们根本不需要在具体Action方法中来对参数作手工验证。...所识别,后者会自动调用该方法对绑定数据对象实施验证

    1.4K80

    Asp.NetCore Web开发之输入验证

    在开发中,验证表单数据是很重要一环,如果对用户输入数据不加限制,那么当错误数据提交到后台后,轻则破坏数据有效性,重则会导致服务器瘫痪,这是很致命。...,该方法第二个参数是一个callback类型函数,在验证时被调用,value是输入值,element是验证元素。...同样,我们也可以自定义验证规则,但是自定义规则,是在后台进行验证,不会在前台直接提示: 方法一(继承ValidationAttribute类,重写IsValid()) public class... protected override ValidationResult IsValid(object value, ValidationContext validationContext...}); } } } 实现Validate方法,可以直接访问属性,进行数据限定,ValidationResult方法参数一是错误信息,参数二是属性名,接下来看看在Action中如何使用验证

    2K30

    通过扩展改善ASP.NET MVC验证机制

    在《使用篇》中我们谈到扩展验证编程方式,并且演示了本解决方案三大特性:消息提供机制分离、多语言支持和多验证规则支持,我们现在来看看这样验证解决方案最终是如何实现。...我们验证特性都直接或者间接地继承自具有如下定义ValidatorBaseAttribute,它使ValidationAttribute子类。...至于为什么需需要这么做,可以参考我上一篇文章《在ASP.NET MVC中如何应用多个相同类型ValidationAttribute?》。...然后根据余下ValidationAttribute列表调用基类GetValidators方法创建ModelValidator列表。...IsValid用于服务端验证GetClientValidationRules生成调用客户端验证规则。

    759100

    【ASP.NET Core 基础知识】--MVC框架--Models和数据绑定

    通过在前端进行验证,用户能够更早地得知输入错误,不是等到提交表单后才得知。 降低后期成本: 在开发阶段实施强大数据验证可以降低维护和修复错误成本。...IsValid(object value, ValidationContext validationContext) { // 自定义验证逻辑 // ......IsValid(object value, ValidationContext validationContext) { // 在这里实现自定义验证逻辑 //...IsValid(object value, ValidationContext validationContext) { // 访问当前验证属性值 var currentValue...有效使用ViewModels: 使用ViewModels来传递数据给视图,不是直接将实体模型传递给视图。这有助于防止过多数据暴露给前端,同时也能更好地适应视图需求。

    59610

    dotNET Core 3.X 使用 Web API

    可以看到在 WeatherForecastController 类上面自动添加了 [ApiController] 特性,添加此特性后,会对 Api 功能有所加持,比如: 自动模型状态验证 意思是当客户端传递模型数据...这个结果不是我们所期望,之前没有 [ApiController] 特性时候,需要在接口方法中处理,如下: [HttpPost] [Route("adduser")] public ActionResult...输入参数 模型绑定 接口输入参数就是通过模型绑定将 HTTP 请求中值映射到参数中,模型绑定有以下六种: [FromRoute]:通过路由 URL 中取值,可以自动推断; [FromQuery]:...参数验证 参数验证是非常重要,否则本来是 4XX 问题就会变成 5XX 问题,参数验证有这么几种: Data Annotations 自定义 Attribute 实现 IValitableObject...ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext

    1.6K30

    分组序列@GroupSequenceProvider、@GroupSequence控制数据校验顺序,解决多字段联合逻辑校验问题【享学Spring MVC】

    前言 本以为洋洋洒洒把Java/Spring数据绑定)校验这块说了这么多,基本已经算完结了。...当然对此问题有的小伙伴说可以自己用if else来处理呀,也不是很麻烦。本文目的还是希望对数据校验一以贯之做到更清爽、更优雅、更好扩展努力。...因为默认组是Default嘛~~~通过它可以自定指定 // 入参T object允许在验证值状态函数中动态组合默认组序列。(非常强大) // object是待校验Bean。...上下文给调用者使用,并没有给validationContext和valueContext,我个人觉得这个设计是不够灵活,无法方便实现dependOn效果~ ConstraintValidatorContext...) ---- 解决网友问题 我把这部分看似是本文最重要引线放到最后,是因为我觉得我描述已经解决这一类问题,不是只解决了这一个问题。

    3.7K21

    【译】.NET 7 预览版 1 中 ASP.NET Core 更新

    增强热重载支持。 数据绑定改进。 更灵活预渲染。 更好地控制 Blazor 服务器电路生命周期。 改进了对微前端支持。 MVC:对端点路由、链接生成和参数绑定改进。...将请求正文绑定为 Stream 或 PipeReader 您现在可以将请求正文绑定为 Stream 或 PipeReader,以有效地支持用户必须摄取数据并将其存储到 blob 存储或将数据排队到队列提供程序...您现在可以将验证配置为使用相应 JSON 属性名称,不是使用新 SystemTextJsonValidationMetadataProvider(或使用 Json.NET 时 NewtonsoftJsonValidationMetadataProvider...将服务注入 Blazor 中自定义验证属性 您现在可以将服务注入 Blazor 中自定义验证属性。 Blazor 将设置 ValidationContext,以便它可以用作服务提供者。...IsValid(object value, ValidationContext validationContext) { var saladChef = validationContext.GetRequiredService

    4K10

    @Valid作用(级联校验)以及常用约束注解解释说明

    该注解用于验证级联属性、方法参数或方法返回类型。 当验证属性、方法参数或方法返回类型时,将验证对象及其属性上定义约束,另外:此行为是递归应用。...此处说一句:项是有这么多,但是并不是每一个都需要走验证逻辑。...,构造方法元数据提取中都会进行调用。...valueContext更加侧重于对对象属性值获取和验证相关操作 BeanMetaData是完成数据校验核心,他结构如下: BeanMetaData内部记录了当前对象相关约束信息...(); //调用校验器isValid方法,通过返回值决定是否校验成功,第一个参数是需要被校验值,第二个参数是上下文环境 isValid = validator.isValid( validatedValue

    3.9K30
    领券