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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:36:00