Событие Blazor корректно работает только во время отладки

#c# #asp.net-core #blazor

Вопрос:

У меня есть компонент, который отслеживает количество слов, введенных в текстовую область. Проблема в том, что слово обновляется после написания первого слова, а затем останавливается. Чтобы снова запустить событие, мне нужно щелкнуть из текстовой области и вернуться, а затем снова ввести. Самое странное в этом то, что, когда я отлаживаю и прохожу через количество слов, обновления обновляются без каких-либо проблем.

Мне просто нужно, чтобы он обновлялся, когда я печатаю, как при отладке.

Мой компонент Блейзора:

 <div class="row">
    <textarea id="test" class="form-control" @bind="text" @onkeypress="WordsLeft"></textarea>
    <p>Words left: @(MaxCount - CurrentWordCount)</p>
</div>

@code {
    [Parameter]
    public int MaxCount { get; set; }

    [Parameter]
    public string text { get; set; } = string.Empty;

    public int CurrentWordCount;

    public void WordsLeft()
    {
        CurrentWordCount = text.Split(' ').Length;
    }
}
 

Порядок того, как он себя ведет:
Открыть страницу (слов осталось: 500) -> введите слово (слов осталось: 499) ->> Введите еще 2 слова (слов осталось 499) ->>> нажмите из области текста ->>>> нажмите обратно в область текста ->>>>> введите другое слово (слов осталось: 496)

Ответ №1:

Вот рабочая версия вашего кода:

 @page "/Test1"
<div class="row">
    <textarea id="test" class="form-control" @bind="text" @oninput="WordsLeft"></textarea>
    <p>Words left: @(MaxCount - CurrentWordCount)</p>
</div>

@code {
    public int MaxCount { get; set; } = 500;

    public string Text { get; set; } = string.Empty;

    public int CurrentWordCount;

    public void WordsLeft(ChangeEventArgs e)
    {
        CurrentWordCount = e.Value.ToString().Length;
    }
}
 

text обновляется только при выходе из элемента управления. Самый простой способ получить фактическое введенное значение при каждом нажатии клавиши-это ChangeEventArgs . Кроме того, как правило, лучше использовать oninput событие.