如何为Blazor的InputRadio或InputRadioGroup添加onchange事件?
原因
Blazor 封装的 InputRadio、InputRadioGroup 组件内部已经内置了 change 事件处理逻辑,直接给组件加 @onchange 会被内部逻辑覆盖,所以无法触发自定义方法。
可行解决方案
方案1:使用 .NET 7+ 支持的 @onchange:after 修饰符(最简单)
如果你的项目运行在.NET 7 或更高版本,直接在 InputRadioGroup 上绑定 @onchange:after 即可,会在内置的绑定逻辑执行完成后自动触发你的自定义方法,不需要修改原有绑定逻辑:
<InputRadioGroup @bind-Value="@i.LeaveRequest.DayTime" @onchange:after="ChangeFunction"> <label>Full Day</label> <InputRadio Value="@FullDay" class="checkbox-P"/> <!-- 其他单选选项 --> </InputRadioGroup>
方案2:拆开 @bind-Value 语法糖自定义处理
@bind-Value 本质是 Value 属性 + ValueChanged 事件的语法糖,你可以手动拆开实现自定义逻辑:
<!-- 注意TValue要和你实际绑定的字段类型保持一致,比如是枚举、int就对应修改 --> <InputRadioGroup Value="@i.LeaveRequest.DayTime" ValueChanged="HandleDayTimeChange" TValue="string"> <label>Full Day</label> <InputRadio Value="@FullDay" class="checkbox-P"/> <!-- 其他单选选项 --> </InputRadioGroup> @code { private void HandleDayTimeChange(string newValue) { // 手动赋值,替代原有的@bind自动绑定逻辑 i.LeaveRequest.DayTime = newValue; // 执行你的自定义方法 ChangeFunction(); } }
方案3:在绑定属性的Setter中触发
你也可以直接修改 i.LeaveRequest.DayTime 属性的定义,在值变化时自动触发方法:
// LeaveRequest 类中的DayTime属性定义 private string _dayTime; public string DayTime { get => _dayTime; set { _dayTime = value; ChangeFunction(); } }
内容的提问来源于stack exchange,提问作者JamesS
相关产品推荐
相关产品推荐

