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
相关产品推荐
相关产品推荐

