无效时,不显示ValidationMessage For

When it is not valid, the ValidationMessage For is not displayed

我在 Blazor 中使用自定义验证,验证执行正确,但是当它无效时 ValidationMessage For 未显示,我尝试添加 ValidationSummary 并在此处显示出现错误信息。希望有人能支持我

 public class Domicilio
    {
        public int Id { get; set; }
        public DateTimeOffset FechaRegistro { get; set; }
        [Required(ErrorMessage ="Favor de capturar la calle")]
        public string Calle { get; set; }
        [Required(ErrorMessage = "Favor de capturar el número exterior")]
        public string NumeroExt { get; set; }
        public string NumeroInt { get; set; }
        [Range(1,int.MaxValue, ErrorMessage="Favor de seleccionar la colonia")]
        public int CodigoPostalId { get; set; }
        public CatCodigosPostales CodigoPostal { get; set; }
        [OtroCPValidation]
        public string OtroCodigoPostal { get; set; }
        public string OtraColonia { get; set; }
        public string OtraCiudad { get; set; }
        public string OtroEstado { get; set; }
        [Range(1,int.MaxValue,ErrorMessage="Favor seleccione el país")]
        public int PaisId { get; set; }
        public CatPaises Pais { get; set; }
        public string Observaciones { get; set; }
    }

public class OtroCPValidation : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var domicilio = (Domicilio)validationContext.ObjectInstance;
            if (domicilio.Pais.Pais != "México" && domicilio.OtroCodigoPostal == null)
            {
                return new ValidationResult($"Captura el código postal extranjero");
            }
                
            else
                return ValidationResult.Success;
        }
    }

<EditForm Model="Domicilio" OnValidSubmit="OnValidSubmit" style="height:75vh" class="row justify-content-center align-items-center">
    <DataAnnotationsValidator />
<div class="form-group">
                            <label>Código postal</label>
                            <div>
                                <SfMaskedTextBox Placeholder="Código postal" Mask="[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" @bind-Value="@Domicilio.OtroCodigoPostal"></SfMaskedTextBox>
                                <ValidationMessage For="@(() => Domicilio.OtroCodigoPostal)" />
                            </div>
                        </div>
</EditForm>

要检查两件事:

  1. 做一个简单的验证器总是return一个错误。
using System.ComponentModel.DataAnnotations;

namespace Whosebug.Answers
{
    public class AlwaysInvalidValidation : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            return new ValidationResult($"Error Message");
        }
    }
}
  1. 使用基本的 Blazor Input 控件进行测试。

  2. 重构逻辑,以便 return 一个错误,除非该值通过逻辑测试。

我已经测试了你的代码的一个版本并且它有效。

我能够解决我遇到的问题,我在 IsValid 方法的 return 中遗漏了一个重载,我将 return 保持原样,我只需要那个改变.

return new ValidationResult(ErrorMessage, new[] { validationContext.MemberName});