新建.NET Blazor Web App中Select/InputSelect绑定失效问题排查
问题原因及解决方案
你的代码里OnSetChanged方法根本没和下拉框的变更事件绑定,所以断点永远不会触发。下面是针对两个下拉框的修复方案:
1. 原生<select>标签的修复
把原来的@bind="SelectedSet"拆分为@bind-value="SelectedSet"和@onchange="OnSetChanged",这样选择值变化时会触发你的自定义方法:
<select @bind-value="SelectedSet" @onchange="OnSetChanged" class="form-select"> <option disabled selected value="">-- Select a Set --</option> @foreach (var set in Sets) { <option value="@set">@set</option> } </select> <p>You selected: @SelectedSet</p>
如果想在绑定完成后执行逻辑,也可以用@bind:after语法(.NET 7+支持):
<select @bind="SelectedSet" @bind:after="OnSetChanged" class="form-select"> <!-- 选项内容不变 --> </select>
2. InputSelect组件的修复
InputSelect是Blazor的表单组件,你可以通过OnChange参数绑定事件,或者用@bind-Value:after:
方式一:绑定OnChange事件
<InputSelect id="SetType" @bind-Value="CollectionSet" OnChange="OnSetChanged" class="form-select"> @foreach (var set in Sets) { <option value="@set">@set</option> } </InputSelect>
方式二:使用@bind-Value:after
<InputSelect id="SetType" @bind-Value="CollectionSet" @bind-Value:after="OnSetChanged" class="form-select"> <!-- 选项内容不变 --> </InputSelect>
额外说明
- 如果你用
@onchange或OnChange,方法参数可以保留ChangeEventArgs e,也可以改成无参方法(根据你的需求)。 - 确保你的组件确实是InteractiveServer渲染模式,检查页面顶部的
@rendermode InteractiveServer是否正确生效(比如页面加载时看浏览器控制台有没有Blazor的连接日志)。
内容的提问来源于stack exchange,提问作者Sas Gabriel
相关产品推荐
相关产品推荐

