Blazor:内联委托与@functions事件处理器执行结果不一致问题咨询
这不是Bug,是你忽略了事件参数类型的小细节!
这种情况我之前也碰到过,一开始以为是Blazor的问题,后来才发现是参数类型用错啦~
问题根源:
- 当你用内联委托的时候,Blazor的编译器会自动帮你推断出键盘事件参数的正确类型是
KeyboardEventArgs,所以代码能正常触发,控制台也能输出按键信息。 - 但你在
@functions里写的showKey方法用了UIKeyboardEventArgs,这个类型在现在的Blazor版本里已经被废弃或者替换了,Blazor找不到匹配的方法来处理事件,自然就不会执行你的代码,控制台也就没输出啦。
修正方法:
把参数类型换成KeyboardEventArgs就行,代码改成这样:
<input type="text" onkeyup="@showKey"/> @functions{ void showKey(KeyboardEventArgs e){ Console.Write(e.Key); } }
另外提一句,现在Blazor更推荐用@code块代替@functions,功能是一样的,但写法更贴合现代Blazor的开发习惯,改成@code的话就是:
<input type="text" onkeyup="@showKey"/> @code{ void showKey(KeyboardEventArgs e){ Console.Write(e.Key); } }
这样修改之后,你的事件处理器就能正常触发,控制台也会输出按键信息啦~
内容的提问来源于stack exchange,提问作者ivaylo
相关产品推荐
相关产品推荐

