如何在Sitefinity中通过代码对动态模块的字段进行创建、编辑及更新操作
Sitefinity 动态模块字段修改代码实现方案
前置准备
- 所有操作需要在Sitefinity的上下文环境中执行,建议写在自定义模块的初始化方法、计划任务或者单独的站点页面中执行,避免权限校验失败
- 操作前必须先引用Sitefinity核心依赖包:
Telerik.Sitefinity.Core、Telerik.Sitefinity.DynamicModules - 执行操作的账号需要有模块管理和动态内容编辑的最高权限
具体操作代码示例
所有操作基于Sitefinity官方提供的ModuleBuilder原生API实现,无需依赖第三方工具。
1. 新增自定义字段
using Telerik.Sitefinity.DynamicModules.Builder; using Telerik.Sitefinity.DynamicModules.Builder.Model; // 替换为你实际的模块名、内容项名 var moduleName = "自定义模块名称"; var itemTypeName = "模块下内容项名称"; var dynamicType = ModuleBuilderManager.GetManager().GetType(moduleName, itemTypeName); using (var mbManager = ModuleBuilderManager.GetManager()) { // 示例:新增短文本类型字段 var newField = mbManager.CreateField(dynamicType); newField.FieldName = "CustomShortText"; newField.FieldType = typeof(string); newField.IsRequired = false; newField.DefaultValue = "默认填充值"; // 配置后台显示的中文名称 newField.Title.SetString("zh-CN", "自定义短文本字段"); // 保存配置 mbManager.SaveChanges(); // 发布变更同步到底层数据表 mbManager.ActivateDynamicType(dynamicType.Id); }
如果需要其他类型字段,直接替换FieldType对应的C#类型即可,比如typeof(int)对应数字字段、typeof(DateTime)对应时间字段、typeof(bool)对应布尔字段。
2. 编辑已有字段
using (var mbManager = ModuleBuilderManager.GetManager()) { var dynamicType = ModuleBuilderManager.GetManager().GetType(moduleName, itemTypeName); // 按字段名定位目标字段 var targetField = dynamicType.Fields.FirstOrDefault(f => f.FieldName == "CustomShortText"); if (targetField != null) { // 修改字段必填属性 targetField.IsRequired = true; // 修改后台显示名称 targetField.Title.SetString("zh-CN", "修改后的字段显示名"); // 修改默认值 targetField.DefaultValue = "更新后的默认值"; mbManager.SaveChanges(); mbManager.ActivateDynamicType(dynamicType.Id); } }
3. 删除已存在字段
using (var mbManager = ModuleBuilderManager.GetManager()) { var dynamicType = ModuleBuilderManager.GetManager().GetType(moduleName, itemTypeName); var targetField = dynamicType.Fields.FirstOrDefault(f => f.FieldName == "CustomShortText"); if (targetField != null) { mbManager.DeleteField(targetField); mbManager.SaveChanges(); mbManager.ActivateDynamicType(dynamicType.Id); } }
注意事项
- 每次修改完成后必须调用
ActivateDynamicType方法,否则变更不会同步到底层数据表和后台配置 - 如果将已有字段从非必填改为必填,需要先确保模块下现有所有数据都符合新的校验规则,否则会触发数据异常
- 生产环境执行脚本前建议先在测试环境验证,同时提前备份数据库和站点配置
- 禁止直接修改Sitefinity系统内置模块的内置字段,避免后续版本升级出现兼容性问题
内容的提问来源于stack exchange,提问作者user7673997
相关产品推荐
相关产品推荐

