Для простоты и (на мой взгляд) причин UX, давайте предположим, что пользователю разрешено вводить строчные буквы, но приложение будет обрабатывать ввод после того, как они покинут это поле.
Сначала создайте новый компонент, чтобы мы могли повторно использовать логи c. Я назвал мой UppercaseTextInput.razor
<input value="@UserInput"
@onchange="async e => await OnChange(e)" />
@code {
[Parameter]
public string UserInput { get; set; }
[Parameter]
public EventCallback<string> UserInputChanged { get; set; }
private async Task OnChange(ChangeEventArgs e)
{
var upperCase = (e.Value as string).ToUpperInvariant();
await UserInputChanged.InvokeAsync(upperCase);
}
}
Закрытый метод OnChange
вызывается всякий раз, когда ввод теряет фокус. Измените @onchange
на @oninput
, чтобы это происходило при каждом нажатии клавиши.
Теперь вы можете использовать этот компонент на другой странице или компоненте. Например, на странице индекса:
@page "/"
<h1>Hello, world!</h1>
<UppercaseTextInput @bind-UserInput="UserInput" />
<p>You typed: @UserInput</p>
@code {
public string UserInput { get; set; } = "Initial";
}
В этом примере в качестве начального текста у меня есть «Начальный», который будет напечатан внутри текстового поля. Как только вы оставите элемент, текст внутри него будет преобразован в верхний регистр.
Преимущество использования компонента состоит в том, что вы можете сделать стандартный @bind-
со своими свойствами.