问题标签 [validationattribute]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2140 浏览

c# - 如何在验证另一个属性时触发对一个属性的验证,使用自定义 ValidationAttribute 和 INotifyDataErrorInfo

直到最近,我一直在使用自定义扩展版的IDataErrorInfo界面。我的扩展使我能够同时处理多个错误,到目前为止,它对我很有帮助。但是,随着INotifyDataErrorInfo界面的引入,我想我会尝试一下,看看是否有任何改进。

在遵循了一些在线教程之后,我得到了它ValidationAttributeSystem.ComponentModel.DataAnnotations namespace. 使用这些Attributes,您可以提供如下基本验证规则:

最初,它看起来相当不错,因为错误消息直接插入到应用sValaidation.Errors中可用的集合中。ErrorTemplate但是,大多数内置验证规则都是非常基础的,我习惯于必须实现涉及其他属性值的复杂验证规则。

因此,我着手寻找一种方法来创建涉及多个属性的简单验证规则:必须设置两个或多个字段之一的规则。所以我声明了一个扩展的类,ValidationAttribute在网上搜索后,找到了一种访问其他属性值的方法。

我敲开了一个基本 UI,其中ErrorTemplate每个都应用了自定义TextBox,它显示Validation.Errors了数据绑定属性的集合:

使用我Attribute对属性的自定义设置,当两个属性都未设置时Name,我设法通过接口将 a 添加ValidationResultValidation.Errors集合中,但问题是:如果我将值添加到TextBox绑定到其他必需属性的其他 es 数据之一中,则第一个错误消息TextBox会留在那里。

如果我回到第一个TextBox并输入一些内容,那么验证将起作用,因此即使我删除了该值,它仍然知道设置了一个必需的属性。所以验证代码有效,但问题是对其他必需属性的属性更改不会触发属性中的验证Name

即使我将相同的自定义Attribute应用于其他必需的属性,同样的事情也发生了……每个验证错误只有在输入相关的TextBox. 我还尝试了CustomValidationAttribute使我们能够调用类中的方法进行验证的内置方法,但最终结果是相同的。

验证代码有效,但不会从其他必需的属性更改中触发。我什至尝试调用该Validate方法,传入其他属性的名称,但这以连续循环结束。所以问题是,当另一个属性被验证时,如何触发对一个属性的验证?

0 投票
2 回答
899 浏览

c# - 如何将视图模型数据传递给 ValidationAttribute?

所以我有一个简单的自定义验证属性:

MyCustomValidor 继承了下面的类,因为我所有的自定义验证器都需要访问它。

然后我在我的 viewModel 中调用它,它看起来有点像这样:

在我将私人传递给IsWebLive我的地方,validator我收到一个错误,说an attribute argument must be a constant expression, typeof expression or array. 我知道我可能做错了。但是我怎么能把这个布尔值传递给验证器,因为我无法访问系统中其他任何地方的设置;

我也不能私下设置IsLive/MessageResource/MessagePrefixMyCustomValidator因为我的自定义验证器的东西是通用的,MessagePrefix并且MessageResource可以在我的所有自定义验证器中访问。

0 投票
1 回答
21474 浏览

c# - 在 C# MVC 中验证枚举值。发生部分验证 - 如何更改验证行为?

我一直将我的剃刀视图中的枚举表示为隐藏字段,该字段被发布回操作结果。

我注意到,当它绑定 HTML 中提供的字符串值时,它会自动验证枚举的值。

剃刀:

呈现的 HTML:

如果我将 DOM 中的值更改为不正确的值并提交表单,则ModelState.IsValid返回false并将以下错误添加到 ModelState:

这都是肉汁,但我认为如果我创建了一个视图模型,我必须在我的视图模型上明确设置验证规则,例如[Required]属性。

还有一个专门用于此的验证属性,称为EnumDataType.

问题

如果在绑定时自动进行验证,那么EnumDataType数据验证属性的意义何在?

0 投票
1 回答
11112 浏览

c# - 如果需要 C# 自定义属性

我刚刚进入自定义属性,我非常喜欢它们。我想知道是否可以创建一个应用于属性并表示同一对象中另一个属性的名称的属性。If 会检查被引用的属性是否有值,如果有,则需要修饰属性。像这样的东西:

因此,approved by 属性用RequiredIfNotNull 属性修饰,该属性引用该属性以检查是否为空。在这种情况下,批准日期。如果 ApprovedDate 有值,我希望 ApprovedBy 属性是必需的。有可能做这样的事情吗?如果是这样,您可以在服务器端和客户端实现它吗?

0 投票
1 回答
1811 浏览

c# - 具有自定义验证属性的 .NET MVC 错误客户端

我编写了一个非常简单的自定义验证属性来检查字母数字字符串并且它在服务器端工作,但是当我尝试在 .NET MVC 中使用客户端模型验证时,我得到了一个 NullReferenceException 用于validationContext。我的自定义属性编写在 MVC 应用程序使用的单独类库中。属性和验证器类在这里:

然后,我在 MVC 应用程序中有一个简单的模型类,并使用 [AlphaNumeric] 装饰器进行数据注释:

最后,我让我的控制器通过模型类并使用标准的 ModelState.IsValid 验证方式......

当我访问我的 web 表单并提交时,我在控制器的操作方法被调用之前立即得到空引用异常:

我在这里想念什么?如果我使用其他内置数据注释,如正则表达式等,我不会收到此错误。我是否需要向 MVC 应用程序注册某种处理程序?我真的很茫然。是的,我可以将一个简单的正则表达式验证属性用于这么简单的事情,但我需要了解问题的根源,因为我有许多更复杂的验证属性要编写,并且想了解如何正确连接它们。谢谢...

0 投票
1 回答
76 浏览

c# - 创建一个使用编辑器模板并且是 ValidationAttribute 的 DataTypeAttribute

使用 MVC5 和 .NET 4.5

我想制作一个既可以使用编辑器模板又可以用作 ValidationAttribute 的 DataTypeAttribute。

据我了解, DataTypeAttribute 继承自 ValidationAttribute 所以我认为这并不困难。

但是,我无法对其进行验证。

这是我的属性:

这是我的 ViewModel 中的属性:

我的 XXXAttribute 的 IsValid 方法中的调试器显示它从未在提交时被检查过。

有人可以向我指出我做错了什么吗?谢谢你。

0 投票
0 回答
472 浏览

c# - 数据注释映射到对象的属性

如果标题不够有代表性,我很抱歉。

所以就我而言,我想构建一个更动态的搜索表单。以前我的搜索表单只支持相等运算符。现在我希望它支持另一个运算符(包含,大于等)。

这是我之前的搜索表单模型的样子:

现在新的查询模型如下所示:

其中过滤器字段:

在这种情况下,我希望Value属性数据注释是指在上面的示例中使用此类的属性的数据注释是FirstName属性。这样当我将FirstName 的Value属性放入 View 时,该字段将根据 FirstName 属性上定义的验证属性进行验证。

0 投票
9 回答
167493 浏览

c# - 电话号码验证 MVC

我正在尝试使用正则表达式来验证电话号码并在提交无效号码或电话号码时返回错误。

MVC 代码

C#代码

但是,输入框不会向用户显示一条消息,表明提交的电话号码无效。

0 投票
1 回答
588 浏览

asp.net-mvc-5 - 我的客户端验证属性

我的页面有一个业务规则 - 日期控件应该按升序排列。即输入到 Date1 的值 < 输入到 Date2 的值 < Date3

我的属性:

客户端:

模型:

并查看(必要部分):

此外,结果 HTML 的一部分:

但是当我输入 Date1='11/11/2010' 和 Date2='11/11/2009' 调试器说,datecomparer 方法返回 false,但没有出现验证器消息。为什么以及如何解决?

0 投票
1 回答
1176 浏览

c# - Programmatically validate using data annotations?

I have a property of entity subclass, I'd like to validate if it's null.

I can't annotate it with the [Required] attribute, because then the EF parser interprets it as required. I only want it to be required for this type (it's an inherited entity).

Thing is I use display resources in my project and I want the property name and the error message to be retrieved from resources.

The entity implements IValidatableObject, so I wanted to add Validator.TryValidateObject and get the customized validation error automatically, but it requires an instance of ValidationContext whose constructor I want to use, takes a Dictionary<object, object>, which I'm not sure what argument it requires. I'm sure this is the constructor I'm looking for, because I'm looking for a way to specify the instance and member name so the validator extracts the display variables automatically.

I don't mind doing this is in any other way, but I do prefer an out-the-box way where the system cares about formatting the validation errors with the display names of the properties and the error messages fetched from the resources.

Anyway, I'd like to ask, how does the Validator class get the display name internally? Is there anything of this functionality exposed?
Another question would be how does the ValidationContext set the MemberName internally? Ho can I construct such a ValidationContext myself?