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

Kentico 13:如何创建含WidgetProperties的ComponentViewModel并传入InvokeAsync?

解决方案:传递包含WidgetProperties的ComponentViewModel给InvokeAsync

针对你遇到的ComponentViewModel.Properties只读、Create()方法不支持传入IWidgetProperties的问题,有几种可行的处理方式:

  • 自定义ComponentViewModel子类
    如果系统允许继承,创建一个子类并开放Properties的设置入口:

    public class CustomComponentViewModel : ComponentViewModel
    {
        public new IWidgetProperties Properties { get; set; }
    
        public CustomComponentViewModel(IWidgetProperties properties)
        {
            Properties = properties;
        }
    }
    

    之后直接实例化这个子类传入InvokeAsync:

    var vm = new CustomComponentViewModel(yourWidgetProperties);
    await viewComponentHelper.InvokeAsync("YourComponentName", vm);
    
  • 通过反射设置只读属性
    如果无法继承,可利用反射绕过只读限制(注意:仅在无其他方案时使用,可能破坏封装):

    var vm = ComponentViewModel.Create();
    var propertiesProp = typeof(ComponentViewModel).GetProperty(nameof(ComponentViewModel.Properties), BindingFlags.Public | BindingFlags.Instance);
    propertiesProp.SetValue(vm, yourWidgetProperties);
    await viewComponentHelper.InvokeAsync("YourComponentName", vm);
    
  • 检查内部工厂方法或重载
    查看ComponentViewModel所在程序集的内部代码,是否存在未公开的Create重载或工厂方法,例如:

    // 假设存在内部重载
    var vm = ComponentViewModel.Create(yourWidgetProperties);
    

    可借助反编译工具确认是否有此类隐藏入口。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:27:02