无效时,不显示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>
要检查两件事:
- 做一个简单的验证器总是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");
}
}
}
使用基本的 Blazor Input
控件进行测试。
重构逻辑,以便 return 一个错误,除非该值通过逻辑测试。
我已经测试了你的代码的一个版本并且它有效。
我能够解决我遇到的问题,我在 IsValid 方法的 return 中遗漏了一个重载,我将 return 保持原样,我只需要那个改变.
return new ValidationResult(ErrorMessage, new[] { validationContext.MemberName});
我在 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>
要检查两件事:
- 做一个简单的验证器总是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");
}
}
}
使用基本的 Blazor
Input
控件进行测试。重构逻辑,以便 return 一个错误,除非该值通过逻辑测试。
我已经测试了你的代码的一个版本并且它有效。
我能够解决我遇到的问题,我在 IsValid 方法的 return 中遗漏了一个重载,我将 return 保持原样,我只需要那个改变.
return new ValidationResult(ErrorMessage, new[] { validationContext.MemberName});