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

自定义ValidationAttribute未在视图模型中触发IsValid函数调用

自定义ValidationAttribute未在视图模型中触发IsValid函数调用的问题,可能是由于以下原因导致的:

  1. 未正确注册自定义ValidationAttribute:请确保在Startup.cs文件中的ConfigureServices方法中正确注册自定义ValidationAttribute。
代码语言:csharp
复制
services.AddControllersWithViews()
    .AddMvcOptions(options =>
    {
        options.ModelMetadataDetailsProviders.Add(new ValidationAttributeAdapterProvider());
    });
  1. 未在视图模型中使用自定义ValidationAttribute:请确保在视图模型中使用自定义ValidationAttribute,并且在视图中使用ModelState.IsValid进行验证。
代码语言:csharp
复制
public class MyViewModel
{
    [MyCustomValidation]
    public string MyProperty { get; set; }
}
  1. 自定义ValidationAttribute未正确实现IsValid方法:请确保自定义ValidationAttribute中的IsValid方法正确实现,并且返回正确的结果。
代码语言:csharp
复制
public class MyCustomValidationAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        // 在这里实现自定义验证逻辑
        return true;
    }
}
  1. 视图中未使用ModelState.IsValid进行验证:请确保在视图中使用ModelState.IsValid进行验证。
代码语言:html
复制
@if (!ViewData.ModelState.IsValid)
{
    <div class="alert alert-danger">
       <strong>Error:</strong> Please check the input.
    </div>
}

如果以上方法仍未解决问题,请提供更多详细信息以便进一步排查。

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

相关·内容

ASP.NET MVC编程——模型

清空模型绑定状态 使用ModelState.Clear();清空模型绑定状态以后,验证失败的信息就不会显示到视图上,即使在视图中使用@Html.ValidationSummary()方法。..., MinimumLength = 6)] public string NewPassword { get; set; } 4扩展 自定义注解 创建自定义特性,继承自ValidationAttribute...,ValidationAttribute有两个虚方法,可以通过重载这两个虚方法来完成自定义验证逻辑。...当操作带有参数时,MVC框架使用模型绑定器(默认的或自定义的)在Http请求查找数据,用于构建控制器操作的参数列表。 验证发生的时间 模型验证是在操作执行之前完成的。...当模型绑定器使用新值对模型属性更新后,会利用当前模型元数据获得模型验证器,模型验证器会找到所有施加于模型属性的特性并执行验证逻辑,然后模型绑定器会捕获所有失败的验证规则,并将它们放入模型状态

2.4K80

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

FormatErrorMessage方法在ValidationAttribute的默认实现仅仅是简单地调用String的静态方法Format将参数name作为替换占位符的参数,具体的定义如下。...创建我们自己的验证特性的时候,可以通过重写公有方法IsValid或者受保护方法IsValid来实现我们自定义的验证逻辑。...我们之所以能够通过重写任一个IsValid方法是我们自定义验证逻辑生效的原因在于这两个方法在ValidationAttribute特殊的定义方法。...按照这两个方法在ValidationAttribute的定义,它们之间存在相互调用的关系,而这种相互调用必然造成“死循环”,所以我们需要重写至少其中一个方法比避免“死循环”的方法。...在重写的IsValid方法,我们通过反射获取到了容器对象用于匹配的属性值,如果该值与Value属性值相匹配,则调用基类同名法方法对指定对象进行验证,否则直接返回ValidationResult.Success

1.7K110
  • 让我们的ASP.NET MVC应用可以单独维护验证消息

    在项目开发,我们会使用到很多的描述性文字,比如验证消息、错误消息和确认消息等,让这些文本消息具有可维护性具有重要的意义。...虽然我们可以将它们存储于资源文件,并且ASP.NET的ValidationAttribute也对这种方式提供了原生的支持。...我们仅仅定义了一个将消息ID和替换站位符的对象数组作为参数的构造函数,而该构造函数直接调用基类包含Func参数的构造函数。...至于用于获取验证消息Func对象,则使用调用MessageManager的GetMessage方法来构建。...下面是我们自定义的RequiredAttribute和RangeAttribute,这里使用了一个比较讨巧的方式:直接调用System.ComponentModel.DataAnnotations.RequiredAttribute

    70970

    09:数据标注与数据校验

    它的用途主要可以分为下面这三类: 验证 Validation:向数据添加验证规则 展现 Display:指定数据如何呈现给用户 模型 Modelling:添加关于用法和与其它类的关系信息 下面是一个用来验证和展现用户信息的一个...例如,在 ASP.NET MVC ,Razor 引擎会根据 Model 属性的 DataType 特性动态生成不同类型的表单元素。...数据标注用来验证数据的合法性是最常见的用法,在 ASP.NET Core/Mvc ,数据作为表单 Model 提交时,框架会对 Model 数据自动进行校验,也可以手动调用 ModelState.IsValid...自定义校验特性 自定义一个校验特性很简单,创建一个继承 ValidationAttribute 的类,然后重写它的 IsValid 方法。...,C# 还提供了一个 CustomValidation 特性,也是用来自定义数据校验的,它是通过反射的方式来实现的。

    88240

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

    视图(View),可以通过@model指令声明绑定到视图模型类型。 Razor视图引擎通过模型对象的属性进行输出数据绑定,将模型的数据渲染到HTML。...这可以通过在控制器手动调用 TryUpdateModel 或 UpdateModel 方法来实现。...2.4 视图中的模型绑定 在ASP.NET Core MVC视图中的模型绑定是指将控制器传递给视图模型数据与视图中的元素进行关联的过程。...4.2 自定义模型验证器 在ASP.NET Core MVC,你可以通过自定义模型验证器来实现对模型数据的自定义验证逻辑。...以下是创建自定义模型验证器的一般步骤: 创建自定义验证器类: 创建一个自定义的验证器类,通常继承自 ValidationAttribute 类。

    60010

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

    另一个支持POST请求的Index方法具有一个Person类型的参数,我们在该Action方法调用Validate方法对这个输入参数实施验证。...“System.ComponentModel.DataAnnotations”命名空间定义了一系列具体的ValidationAttribute特性类型,它们大都可以直接应用在自定义数据类型的某个属性上对目标数据成员实施验证...常规验证可以通过上面列出的这些预定义ValidationAttribute特性来完成,但是在很多情况下我们需要通过创建自定义ValidationAttribute特性来解决一些特殊的验证。...比如上面演示实例针对Person对象的验证,我们要求Gender属性指定的表示性别的值必须是“M/m”和“F/f”两者之一,这样的验证就不得不通过自定义ValidationAttribute特性来实现...具体的验证实现在重写的IsValid方法,如果被验证的值在这个列表,则视为验证成功并返回True。为了提供一个友好的错误消息,我们重写了方法FormatErrorMessage。

    1.4K80

    Asp.NetCore Web开发之输入验证

    //验证规则以及不匹配的显示文字 required: "此项必填" } }, //验证失败触发的事件...,该方法的第二个参数是一个callback类型的函数,在验证时被调用,value是输入的值,element是验证的元素。...同样的,我们也可以自定义验证规则,但是自定义的规则,是在后台进行验证的,不会在前台直接提示: 方法一(继承ValidationAttribute类,重写IsValid()) public class...在需要验证PersonData的Action,我们就可以进行验证,代码如下: Console.WriteLine(ModelState.IsValid); foreach (var prop in ModelState.Values...: 方法二(模型类实现IValidatableObject接口,实现自身验证): public class PersonData:IValidatableObject { [StringLength

    2K30

    ASP.NET MVC的客户端验证:jQuery验证在Model验证的实现

    服务端验证最终实现在相应的ModelValidator,而最终的验证规则定义在相应的ValidationAttribute;而客户端验证规则通过HtmlHelper相应的扩展方法(比如...] 一、ValidationAttribute与HTML ASP.NET MVC默然采用基于ValidationAttribute特性的声明式Model验证,服务端验证最终实现在两个重写的IsValid...在一个以此Contact为Model类型的View,如果我们调用HtmlHelper的扩展方法EditorForModel,最终会生成如下一段HTML。...接口,它(ValidationAttribute)的GetClientValidationRules方法被调用返回的ModelClientValidationRule列表作为该方法的返回值。...ASP.NET MVC的客户端验证:jQuery的验证 ASP.NET MVC的客户端验证:jQuery验证在Model验证的实现 ASP.NET MVC的客户端验证:自定义验证

    7.1K70

    C# 特性 System.ComponentModel 命名空间属性方法大全,System.ComponentModel 命名空间的特性

    之前笔者把一些东西混肴了,类型 [Required] [MaxLength] 这些特性,本质是类,有其构造函数、方法。...Validator 定义一个帮助器类,在与对象、属性和方法关联的 ValidationAttribute 特性包含此类时,可使用此类来验证这些项。...(Inherited from ValidationAttribute) TypeId 在派生类实现时,获取此 Attribute 的唯一标识符。...RunInstallerAttribute 指定在安装程序集时是否应调用 Visual Studio 自定义操作安装程序或 Installutil.exe (安装程序工具)。...ICollectionView 使集合具有当前记录管理、自定义排序、筛选和分组功能。 ICollectionViewFactory 可以实现集合以创建其数据的视图的接口。

    4.2K30

    我这么玩Web Api(二)

    数据验证,全局数据验证与单元测试 目录 一、模型状态 - ModelState 二、数据注解 - Data Annotations 三、自定义数据注解 四、全局数据验证 五、单元测试 一、模型状态 -...二、数据注解 - Data Annotations   数据注解可以理解为验证数据的逻辑或方法,微软本身有提供一批数据注解,当然我们也可以自定义数据注解,以下是微软提供的常见的数据注解:   1....Remote - 远程调用验证   Remote可以利用服务端回调函数执行客户端的验证逻辑。   注:该数据注解是ASP.NET MVC特有的注解,在Web Api无此注解。...  如果觉得微软提供的数据注解不够用,也可以自己写数据注解,只需要继承ValidationAttribute,并复写IsValid方法。   ...其中ContextUtil是微软源码的测试辅助类。

    1.3K60

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

    此功能允许 gRPC 服务像带有 JSON 请求和响应的 RESTful HTTP API 一样被调用。 SignalR:添加对强类型客户端的支持并从客户端调用返回结果。...Razor 页面的可为空模型 在验证错误中使用 JSON 属性名称 改进了 dotnet watch 的控制台输出 将 dotnet watch 配置为始终重新启动以进行粗鲁的编辑 在 ValidationAttribute...Razor 页面的可为空模型 我们启用了定义一个可为空的页面或视图模型来改进在 ASP.NET Core 应用中使用空状态检查时的体验: @model Product?...模型属性名称通常是一个实现细节,这会使它们难以从单页应用程序处理。...将服务注入 Blazor 自定义验证属性 您现在可以将服务注入 Blazor 自定义验证属性。 Blazor 将设置 ValidationContext,以便它可以用作服务提供者。

    4K10

    ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上

    ] 目录 一、ValidationAttribute本身是可以应用到参数上的 二、为什么需要基于参数的Model验证?...四、自定义ModelValidatorProvider 五、自定义ModelBinder 六、实例演示 一、ValidationAttribute本身是可以应用到参数上的 如果你够细心应该会发现我们常用的验证特性都可以直接应用到方法的参数上...在重写的GetParameterValue方法,我们在调用基类的同名方法之前将作为参数的ParameterDescriptor对象保存到当前Controller上下文中,具体来说是放到了表示当前路由数据的...五、自定义ModelBinder 在默认的情况下,只有在针对复杂类型的Model绑定过程才会进行Model验证。...为了使Model验证发生在针对简单类型的Model绑定过程,我们不得不创建一个自定义的ModelBinder。

    77090

    MVC 3.0 的新特性 摘要

    在 ASP.NET MVC3 ,增加视图的对话框中允许你选择你希望的视图引擎,在新建项目对话框,你可以指定项目默认的视图引擎,可以选择 WebForm,Razor,或者开源的视图引擎,例如:Spark...你需要在视图中显式调用 Html.EnableClientValidation 方法来启用客户端验证。...这允许客户端的验证库自动调用一个你定义在服务器上的自定义的方法来完成只能在服务器上完成的验证逻辑。...ValidationAttribute 类 在 .NET Framework4 中被改进 的ValidationAttribute 类支持新的 IsValid 重载,提供关于当前验证上下文的更多信息,例如什么对象被验证了...默认情况下,创建和编辑的脚手架现在使用 Html.EditorFor 助手来替代 Html.TextBoxFor 助手,这个改进在增加视图对话框生成一个视图的时候,支持模型的元数据标签。

    2.6K10

    ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

    ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需要将相应的ValidationAttribute...对于自定义验证,我们也只需要定义相应的Validation就可以了,不过服务端验证比较简单,而客户端验证就要稍微复杂一些,本文提供一个简单的实例说明在ASP.NET MVC实现自定义验证的基本步骤。...服务端验证逻辑定义在重写的IsValid方法,并且重写了FormatErrorMessage方法以便生成针对年龄的验证消息。...maximum) 4: : base(minimum, maximum) 5: { } 6:  7: public override bool IsValid...person) 9: { 10: return View(person); 11: } 12: } 如下所示的代码片断代表了View的定义,我们直接调用

    3.9K50

    快速入门系列--MVC--04模型

    需要注意的是,如果想自定义一个特性,那么就要实现IMetadataAware接口,与它同名的接口也经常出现在.NET相关数据绑定,代码如下所示。...即使不使用Razor视图引擎,直接使用静态的HTML5页面,该模块仍然不可或缺。现在简单的介绍一下ASP.NET MVC相关的Model绑定。     ...但实际学习的过程,尤其是自定义用于修饰Action的验证特性让我到现在仍然感觉是比较萌萌哒,毕竟这一块对于框架的扩展基本上涉及到了验证相关的所有类型。...首先介绍最重要的基于验证特性的声明式Model验证,ValidationAttribute是所有验证特性的抽象基类,主要内容如下表所示: 成员变量或函数 简介 ErrorMessageResourceName...() 实际调用受保护的IsValid() TypeId 在需要多次使用同一验证特性时需要重写该属性,使得每一次的TypdId不相同。

    92550

    ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则

    RangeValidatorAttribute具有与RangeAttribute一致的构造函数定义,并直接使用被封装的RangeAttribute实施验证。...(object value) 18: { 19: return rangeAttribute.IsValid(value); 20: } 21: ...细心的读者应该留意到了上面演示实例创建的HomeController不是继承自Controller,而是继承自RuleBasedController,这个自定义的Controller基类定义如下。...ExecuteCore和BeginExecuteCore方法被重写,在调用基类的同名方法之前,方法SetValidationRule方法被调用将应用在当前Action方法或者Controller类型上的...在让我们的Controller继承自RuleBasedController之后,我们需要在Global.asax通过如下的方式对自定义的RuleBasedValidatorProvider进行注册,然后我们的应用就能按照我们期望的方式根据你指定的验证规则实施

    803110
    领券