ValidationAttribute 在 Blazor 上部分工作或不工作?

Gui*_*rez 2 c# blazor-server-side

我正在尝试解决在尝试使用 blazor 在我女儿的狗店上执行自定义验证属性时发现的问题。

基本上我有一个属性如下:

[Test]
public int? PetAge { get; set; }
Run Code Online (Sandbox Code Playgroud)

如您所见,我将创建一个名为“Test”的自定义属性,因此我创建了一个新类,如下所示:

public class Test : ValidationAttribute
{

    protected override ValidationResult? IsValid(object? value, ValidationContext validationContext)
    {
        return new ValidationResult("niet! niet!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的理解是,我可以返回一个带有字符串消息的新 ValidationResult,或者如果一切顺利,我可以返回 ValidationResult.Success。在我的示例中,它应该始终返回问题,因为除了始终返回验证结果之外,我们没有提供任何其他逻辑。

运行此代码时,它根本不返回任何内容,表单上也没有显示任何错误。现在我注意到的是,如果我使用 IsValid 方法的其他版本,它会起作用,唯一的问题是我想发回自定义消息而不仅仅是真/假结果。其工作原理如下:

public override bool IsValid(object? value)
    {
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我必须在参数中提供错误消息,如下所示:

[Test(ErrorMessage("this is not ok!")]
    public int? PetAge { get; set; }
Run Code Online (Sandbox Code Playgroud)

由于这些参数必须是常量,因此这是一个很棒的想法,不仅能够将自定义消息显示为错误和/或访问上下文等......

我在 Blazor 应用程序上做错了什么吗?任何帮助将不胜感激!

Dav*_*ave 5

我也注意到了这一点,尝试以下方法

public class Test : ValidationAttribute
{    
    protected override ValidationResult? IsValid(object? value, ValidationContext validationContext)
    {
        return new ValidationResult("niet! niet!", new[] { validationContext.MemberName });
    }
}
Run Code Online (Sandbox Code Playgroud)