You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor中如何为DynamicComponent动态渲染的组件传递运行时指定的回调方法

解决方案

首先修正JSON参数的匹配问题:你的MyButton组件文本参数名为LabelText,需要把JSON配置里的Label字段改为LabelText,否则普通参数无法正常绑定。

然后修改DynamicPage.razor中参数填充的逻辑,通过反射判断参数类型,如果是EventCallback类型就基于方法名创建对应回调实例:

foreach (var kvp in item.Parameters)
{
    var paramName = kvp.Key;
    var jsonValue = ((JsonElement)kvp.Value).GetString();
    
    // 先获取目标组件对应参数的类型
    var paramProp = componentItem.Type.GetProperty(paramName);
    if (paramProp == null) continue; // 不存在的参数跳过

    // 判断是否是无参EventCallback类型
    if (paramProp.PropertyType == typeof(EventCallback))
    {
        // 从当前页面查找对应名称的无参方法
        var method = this.GetType().GetMethod(jsonValue, Type.EmptyTypes);
        if (method != null)
        {
            // 创建EventCallback实例
            var callback = EventCallback.Factory.Create(this, method);
            componentItem.Parameters.Add(paramName, callback);
        }
    }
    else
    {
        // 普通类型参数直接赋值,其他类型可自行扩展转换逻辑
        componentItem.Parameters.Add(paramName, jsonValue);
    }
}

如果需要支持带参数的EventCallback<T>,扩展类型判断分支,调用EventCallback.Factory.Create的泛型重载即可。


内容的提问来源于stack exchange,提问作者bphua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:45:01