Sitefinity小部件设计器自动生成字段值无法持久化至模型问题
Sitefinity小部件设计器自动生成字段值不持久化修复方案
不需要额外实现自定义AngularJS控制器,FAQs属性始终为null是配置遗漏导致的,按以下步骤排查修复即可:
- 检查Widget控制器的模型绑定逻辑
确保控制器的Index/Create/Edit Action直接接收CustomWidgetModel类型作为参数,不要在Action内部手动实例化新的模型对象覆盖提交传入的值,同时确认没有给FAQs属性添加[Bind(Exclude)]、[JsonIgnore]这类阻止绑定/序列化的特性。参考正确的Action写法:public ActionResult Index(CustomWidgetModel model) { return View(model); } - 补全
[Content]特性的类型全名称
你当前代码中Type参数的值缺少程序集后缀,Sitefinity序列化内容选择字段时会因为类型匹配失败丢弃选中值,正确的配置应该是:[Content(Type = "Telerik.Sitefinity.DynamicTypes.Model.FAQs.Faq, Telerik.Sitefinity.DynamicTypes.Model", AllowMultipleItemsSelection =true)] public MixedContentContext FAQs { get; set; }动态内容类型的全名称必须包含程序集标识,格式为
[命名空间.类名], [程序集名],你可以在Sitefinity后台「动态内容」模块的类型配置页直接复制完整的类型全名称避免写错。 - 校验基类属性重写逻辑
检查你继承的CustomDynamicContentModelBase基类,确认没有重写FAQs属性、没有给该属性添加阻止序列化的特性,同时基类中标记的ContentTypeFullName属性值要和[Content]特性中配置的类型全名称完全一致。 - 排查权限与脚本冲突
- 确认当前后台用户对FAQ动态模块有读取权限,权限不足时设计器虽然能正常展示选项,但提交值时会被系统拦截置空
- 如果小部件注册了自定义设计器脚本,移除自定义的AngularJS控制器绑定逻辑,自动生成字段的场景默认依赖Sitefinity内置的绑定逻辑,自定义脚本覆盖默认逻辑会导致值无法提交。
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

