Переопределение Blazor Inputbase для компонента ввода только с двойным входом — как проверить вводC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Переопределение Blazor Inputbase для компонента ввода только с двойным входом — как проверить ввод

Сообщение Anonymous »

Я пытаюсь создать поле ввода, которое всегда будет отображать два знака после запятой. Элементы модели, привязанные к компоненту, всегда будут двойными. Чтобы уточнить, что мне нужно, если вводится текст 12, компонент должен автоматически форматировать отображение до 12.00, а если вводится 12.1, он должен форматировать отображение до 12.10. Я также должен иметь возможность указывать необязательные минимальные и максимальные входные значения и отображать сообщение проверки, если входное значение выходит за пределы границ.
Я использую сервер blazor с использованием .net6.
Я использую сервер blazor с использованием .net6. p>
Я создал компонент, который переопределяет базу ввода, и по большей части он работает нормально. Пользовательский ввод распознается по размытию, а затем текст форматируется в соответствии с требуемым шаблоном. Что не работает, так это проверка ввода. У меня есть метод TryParseValueFromString, который реализует мою логику MIN и MAX, но, похоже, это противоречит моей логике onblur. Кажется, я могу либо заставить работать проверку, но не изменять отображение десятичных знаков, либо наоборот.
Это мой полный код компонента:

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

@inherits InputBase
@using System.Globalization
@using System.Text.RegularExpressions

@if (!string.IsNullOrWhiteSpace(InputPrompt))
{

 @InputPrompt


}
else
{

}

@code {
[Parameter]
public string FormatString { get; set; }
[Parameter]
public double? Min { get; set; }
[Parameter]
public double? Max { get; set; }
[Parameter]
public string InputPrompt { get; set; } = string.Empty;
[Parameter]
public string Styles { get; set; }
[Parameter]
public string InputGroupStyles { get; set; }
[Parameter]
public EventCallback ChangeEvent { get; set; }
private string stringValue = null;
private string _currentValue = null;

protected override void OnInitialized()
{
this.stringValue = this.FormatValueAsString(this.Value);

if (!this.stringValue.Contains("."))
{
this.stringValue = this.stringValue + ".00";
}
base.OnInitialized();
}

private async Task OnInput(ChangeEventArgs e)
{
_currentValue = e.Value.ToString();
}

private async Task OnBlur()
{
if(Decimal.TryParse(_currentValue, out decimal dValue))
{
stringValue = Math.Round(dValue, 2).ToString("0.00");

this.CurrentValueAsString = stringValue;
this.Value = (double)dValue;
}
ChangeEvent.InvokeAsync();
}

// Need this to allow input base to receive value if in format other than its default, expanded to allow testing of Min / Max constraints
protected override bool TryParseValueFromString(string? value, out double result, out string? validationErrorMessage)
{
if (BindConverter.TryConvertTo(value, System.Globalization.CultureInfo.InvariantCulture, out result))
{
if (Min != null)
{
BindConverter.TryConvertTo(value, CultureInfo.InvariantCulture, out double dValue);
if (dValue < Min)
{
validationErrorMessage = "Value Must be greater than " + Min;
return false;
}
}
if (Max != null)
{
BindConverter.TryConvertTo(value, CultureInfo.InvariantCulture, out double dValue);
if (dValue > Max)
{
validationErrorMessage = "Value Must be less than " + Max;
return false;
}
}
validationErrorMessage = null;
return true;
}
else
{
validationErrorMessage = "Can't parse value";
return false;
}
}
protected override string? FormatValueAsString(double value)
{
return value.ToString();
}
}
Я чувствую, что не понимаю порядка событий и, вероятно, упускаю какую-то хитрость. Может ли кто-нибудь дать мне какой-нибудь совет о том, как проверить эти проверочные тесты MIN и MAX, а также убедиться, что на дисплее всегда отображаются 2 знака после запятой.
Большое спасибо

Подробнее здесь: https://stackoverflow.com/questions/791 ... alidate-in
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Переопределение Blazor Inputbase для компонента ввода только с двойным входом — как проверить ввод
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • EditContext не каскадируется в пользовательский ввод, полученный из InputBase
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • EditContext не каскадируется в пользовательский ввод, полученный из InputBase
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • EditContext не каскадируется в пользовательский ввод, полученный из InputBase
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • EditContext не каскадируется в пользовательский ввод, полученный из InputBase
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

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