Проблема: Моя пользовательская логика проверки (
Код: Выделить всё
IsValid- Неверная цель: Если у меня есть ошибка в строке 3, красная рамка и сообщение об ошибке появляются в строке 1.
- Фантомная зависимость: Это действует так, как будто все входные данные в таблице являются расширениями первой ряд. EditContext, похоже, сопоставляет сообщение проверки с первым найденным экземпляром.
- Неисправный контекст: Если я удалю первую строку, проверка полностью перестанет работать для остальных строк.
Razor View:
Код: Выделить всё
@if (EstaCargandoListadoPagosMasivos)
{
}
Код: Выделить всё
public class PeticionListadoPagosMasivosCuentaPagarProveedor
{
public string? NombreProveedor { get; set; }
public long? CuentaPagarProveedorId { get; set; }
public string? Observacion { get; set; }
public string? NumeroFactura { get; set; }
public long? CuentaOrigenId { get; set; }
public string? NombreCuentaOrigen { get; set; }
public decimal? SaldoPendiente { get; set; }
[MaxValorPago]
public decimal? ValorPago { get; set; }
public DateTime? FechaPago { get; set; }
}
public class MaxValorPagoAttribute : ValidationAttribute
{
public MaxValorPagoAttribute()
{
ErrorMessageResourceType = typeof(Resources.Pages.Financiero.CuentasPagarProveedor.PagosMasivosCuentaPagarProveedor);
ErrorMessageResourceName = nameof(Resources.Pages.Financiero.CuentasPagarProveedor.PagosMasivosCuentaPagarProveedor.ErrorMessageValorPago);
}
protected override ValidationResult? IsValid(object? value, ValidationContext validationContext)
{
if (validationContext.ObjectInstance is not PeticionListadoPagosMasivosCuentaPagarProveedor row || value == null)
return ValidationResult.Success;
if (value is not decimal valorPago)
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
if (row.SaldoPendiente.HasValue && valorPago > row.SaldoPendiente.Value)
{
var mensaje = ErrorMessageString.Replace("[saldo]", row.SaldoPendiente.Value.ToString("N2", CultureInfo.CurrentCulture));
return new ValidationResult(mensaje, new string[] { validationContext.MemberName! });
}
return ValidationResult.Success;
}
}
Ниже приведен пример того, как третья строка изменяется путем добавления дополнительных 9, чтобы вы могли видеть, как проверка всегда отображается в первой записи. Как будто других записей на самом деле не существует, потому что, если я удалю первую запись, в остальных ничего не отобразится. Дело не в том, что проверка всегда отображается для первой записи, независимо от того, была ли она удалена и заменена другой; дело в том, что на первой пластинке это всегда делается так, как если бы она была единственной.
Все перепробовал, но ответа не нашел.
Подробнее здесь: https://stackoverflow.com/questions/798 ... -first-row
Мобильная версия