我正在使用blazor进行搜索。当我按下输入中的一个键时,它会检查它是否是输入键,如果是,则启动搜索。但是,绑定变量(keywordValue(的值似乎不会更新,直到我连续两次按enter键。如果我第一次按下它,值不会更新。
<h1>Blogs</h1>
<fieldset>
<label>Keyword Search</label>
<input type="text" @bind="keywordValue" @bind:event="oninput" @onkeypress="KeywordEnterPressed"/>
<button type="submit" @onclick="SearchBlogs">Search</button>
</fieldset>
private string keywordValue { get; set; }
protected async void KeywordEnterPressed(KeyboardEventArgs eventArgs)
{
if (eventArgs.Key == "Enter")
{
await SearchBlogs();
}
}
例如:如果我在输入字段中键入"test"并按enter键,它将运行值为"的searchblogs((。当我再次点击enter时,它会运行searchblogs((,其值为"test"。
由于事件排序,我通过使用"onkeyup";而不是";onkeypress";
您应该使用Task而不是void
写入:protected async Task KeywordEnterPressed
而不是protected async void KeywordEnterPressed
顺便说一句,按钮元素的类型应该是"按钮",而不是"提交">
执行以下操作:<button type="button" @onclick="SearchBlogs">
而不是<button type="submit" @onclick="SearchBlogs">
希望这能帮助。。。
根据Nick的评论,这似乎是事件排序,在运行按键事件时没有发生绑定。在搜索之前,我在按键事件中添加了一个Task.Delay(100(,以便为绑定留出时间,现在为我执行操作。这并不好,因为100完全是任意的。