继承InputBase<TValue>的自定义Select组件EventCallback传递报错解决
解决Blazor自定义Select组件的EventCallback类型不匹配问题
问题原因
编译器报错是因为子组件定义的EventCallback<Select<TValue>>与父组件回调方法的参数类型在隐式转换时不兼容。当父组件使用Select<int>实例时,子组件的OnSelected实际应为EventCallback<Select<int>>,直接传递方法组会触发类型转换错误。
正确传递回调的两种方法
方法一:显式创建匹配的EventCallback
通过EventCallback.Factory.Create指定泛型类型,确保类型完全匹配:
<Select Id="InvestmentEntity" OnSelected="@EventCallback.Factory.Create<Select<int>>(this, OnInvestmentEntitySelect)"></Select>
方法二:使用类型匹配的Lambda表达式
确保Lambda参数类型与子组件OnSelected的泛型类型一致:
<Select Id="InvestmentEntity" OnSelected="@(sender => OnInvestmentEntitySelect(sender))"></Select>
如果方法签名完全匹配,也可直接使用方法组写法(需确保Blazor能正确推断类型):
<Select Id="InvestmentEntity" OnSelected="@OnInvestmentEntitySelect"></Select>
额外检查项
- 确认父组件已引用子组件命名空间:
@using Accounting.Web.Components.Forms - 子组件
OnSelected参数未与InputBase<TValue>内置事件冲突(当前自定义命名无问题)
内容的提问来源于stack exchange,提问作者Musaffar Patel
相关产品推荐
相关产品推荐

