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 应用程序上做错了什么吗?任何帮助将不胜感激!
我也注意到了这一点,尝试以下方法
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)