如何将Blazor Select的@onchange事件绑定到Id字段而非硬编码?
解决方法
有两种简单方式可以把选中的Visit ID传递给VisitSelected方法,替代硬编码的参数:
方法一:利用已绑定的值
你已经通过bind-value="@VisitDTO.Id"把下拉框选中值绑定到了VisitDTO.Id,直接在VisitSelected方法里使用这个字段即可,无需额外传参:
修改后的Select代码:
<Select id="Person" class="form-select" bind-value="@VisitDTO.Id" style="width: 500px" @onchange="VisitSelected"> <option value="0">Ivco Ref:</option> @foreach (var visits in Visits) { <option value="@visits.Id">@visits.Id</option> } </Select>
对应方法实现:
private void VisitSelected() { var selectedVisitId = VisitDTO.Id; // 这里使用选中的ID执行后续逻辑 }
方法二:从事件参数中获取选中值
如果不想依赖VisitDTO.Id的绑定,也可以直接从onchange事件参数里提取选中的ID:
修改后的Select代码:
<Select id="Person" class="form-select" bind-value="@VisitDTO.Id" style="width: 500px" @onchange="HandleVisitChange"> <option value="0">Ivco Ref:</option> @foreach (var visits in Visits) { <option value="@visits.Id">@visits.Id</option> } </Select>
对应方法实现:
private void HandleVisitChange(ChangeEventArgs e) { // 安全转换选中值为int,避免转换失败抛出异常 if (int.TryParse(e.Value?.ToString(), out int selectedVisitId)) { VisitSelected(selectedVisitId); } } private void VisitSelected(int visitId) { // 这里拿到的就是实际选中的Visit ID // 执行后续逻辑 }
注意事项
- 如果第一个选项(
value="0")是占位符,记得在方法里判断selectedVisitId是否为0,避免触发无效逻辑。 - 优先用
int.TryParse而非直接int.Parse,能提升代码健壮性。
内容的提问来源于stack exchange,提问作者Dan Block
相关产品推荐
相关产品推荐

