我的 Blazor WASM 独立应用程序(针对 .NET 9)中有一个简单的应用程序select
,我想在用户选择一个选项后执行一些操作。我了解对于async
调用,Microsoft 现在建议使用bind:after
。
我按照这个视频DoSomething()
操作,并按照他在教程中所做的操作,但在我的例子中,我没有达到我在代码中设置的方法中的断点。我在这里做错了什么?
<div>
<select @bind="SelectedState" @bind:after="DoSomething">
<option value="">Please select one</option>
<option value="AK">Alaska</option>
<option value="MT">Montana</option>
<option value="WY">Wyoming</option>
</select>
</div>
@code {
private string SelectedState;
private async Task DoSomething()
{
var userSelected = SelectedState; // Have a break point here but don't hit it
}
}
这个问题有点误导,导致我最初的回答出现偏差。阅读@NickPattman 现已删除的回答和评论让我走上了正确的道路。
问题不在于事件没有触发。它触发了。问题是,当更改事件由鼠标单击驱动时,WASM 调试器会忽略断点。服务器中不存在此问题。
真正奇怪的是,如果您使用键盘的向上和向下箭头来更改值,它就会起作用,如果您需要命中断点,这就是解决方法!
所以这不是代码问题 [事件有效并触发],而是一个奇怪的调试器问题。据 @NickPattman 所言,这个问题已经报告,但至今尚未解决。
https://github.com/dotnet/aspnetcore/issues/60018
需要说明的是,这
@bind:after
实际上不是一个单独的事件。Razor 编译器会构建附加到OnChange
事件的内联代码,如下所示:原始答案
不确定您的应用程序如何配置,但您的代码应该可以工作。
注意:如果您正在预渲染,则页面在初始服务器端渲染期间将处于“静态”状态。
这是我的演示页面:
演示 Repo 在这里:https://github.com/ShaunCurtis/SO79542108