Warm tip: This article is reproduced from serverfault.com, please click

c#-Blazor 事件仅在调试时正常工作

(c# - Blazor event only works correctly while debugging)

发布于 2021-10-20 21:02:38

我有一个组件可以跟踪输入文本区域的单词数。问题是在写完第一个单词后单词会更新然后停止。要让它再次触发事件,我必须单击文本区域并重新单击,然后再次键入。奇怪的是,当我调试并逐步完成字数更新时,没有任何问题。

我只需要它更新,就像我在调试时那样打字。

我的 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)

Questioner
asciik
Viewed
0
MrC aka Shaun Curtis 2021-10-21 05:29:40

这是你的代码的工作版本:

@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事件。