BootstrapBlazor: ошибка проверки внутри таблицы всегда появляется в первой строке.C#

Место общения программистов C#
Ответить
Anonymous
 BootstrapBlazor: ошибка проверки внутри таблицы всегда появляется в первой строке.

Сообщение Anonymous »

Я использую BootstrapBlazor с компонентом Table внутри ValidateForm. Я привязываю форму непосредственно к List.
Проблема: моя пользовательская логика проверки ( в C#) работает правильно и обнаруживает ошибки в определенных строках. Однако обратная связь пользовательского интерфейса ведет себя странно:
  • Неправильная цель: если у меня есть ошибка в строке 3, красная рамка и сообщение об ошибке появляются в строке 1.
  • Фантомная зависимость: это действует так, как будто все входные данные в таблице являются расширениями первой строки. EditContext, похоже, сопоставляет сообщение проверки с первым найденным экземпляром.
  • Неисправный контекст: если я удалю первую строку, проверка полностью перестанет работать для остальных строк.
Мой код — представление Razor:

Код: Выделить всё

@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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»