Razor组件中通过@Body传递EventCallback级联值时事件为何不触发
问题原因及解决办法
核心问题1:CascadingValue传递的是字符串而非回调方法
父组件中<CascadingValue Value="HandleChange">的Value绑定了字符串"HandleChange",而非实际的回调方法。你需要去掉引号,使用@符号绑定到方法本身:
<CascadingValue Value="@HandleChange"> @Body </CascadingValue>
核心问题2:父组件方法签名与EventCallback的适配问题
子组件接收的是EventCallback<bool>,虽然void返回值的方法可以被包装为EventCallback,但更稳妥的是将父组件的方法改为返回Task(即使没有异步操作,也可以返回Task.CompletedTask),避免潜在的异步调用问题:
private Task HandleChange(bool isgb) { // 先移除异常,否则触发后直接报错 // throw new Exception(); isGB = isgb; StateHasChanged(); return Task.CompletedTask; }
额外问题:父组件方法内的异常会阻断逻辑
当前父组件的HandleChange方法第一行就抛出异常,就算回调成功触发,后续的状态更新逻辑也永远不会执行,需要移除或调整异常抛出的位置。
子组件注意事项
确保子组件的CascadingParameter名称与父组件传递的CascadingValue的内容匹配,当前名称HandleChange是一致的,这部分没问题。
内容的提问来源于stack exchange,提问作者Patrik Nusszer
相关产品推荐
相关产品推荐

