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

Blazor DragAndDrop组件改造:实现拖拽复制,保留源列表项

解决方案:将Blazor拖拽组件改为复制模式

要实现拖拽时复制列表项而非移动,核心是修改对象更新逻辑,从修改原对象状态改为创建新对象副本并添加到目标集合。以下是具体修改步骤:

1. 为Groupdate类添加克隆方法

首先需要实现Groupdate对象的复制能力,避免直接修改原实例。在你的Groupdate实体类中添加克隆方法:

public class Groupdate
{
    public int GrID { get; set; }
    public string Name { get; set; } // 请根据实际属性调整
    public GroupsStatuses Status { get; set; }
    public DateTime LastUpdated { get; set; }

    // 克隆方法:复制所有属性
    public Groupdate Clone()
    {
        return new Groupdate
        {
            // 注意:若GrID是主键,需生成新的唯一值(如自增ID或GUID)
            // 业务允许重复标识的话,可直接保留原值
            GrID = this.GrID,
            Name = this.Name,
            Status = this.Status,
            LastUpdated = this.LastUpdated
        };
    }
}

2. 修改DragAndDropContainer.razor.cs的UpdateGroupsAsync方法

原方法通过修改原对象Status实现移动,现在改为创建副本并添加到集合:

public async Task UpdateGroupsAsync(GroupsStatuses newStatus)
{
    // 克隆原拖拽对象
    var newGroup = Payload.Clone();
    
    // 设置副本的新状态和更新时间
    newGroup.Status = newStatus;
    newGroup.LastUpdated = DateTime.Now;

    // 若GrID是主键,生成新的唯一ID(示例为int自增,根据实际类型调整)
    // if (Groups.Any())
    // {
    //     newGroup.GrID = Groups.Max(g => g.GrID) + 1;
    // }
    // else
    // {
    //     newGroup.GrID = 1;
    // }

    // 将副本添加到总集合
    Groups.Add(newGroup);
    
    // 触发状态更新回调
    await OnStatusUpdated.InvokeAsync(newGroup);
}

3. 效果验证

修改完成后:

  • 拖拽Exist状态的项到Assign区域时,原项会保留在Exist列表中
  • 目标Assign列表会新增一个与原项属性一致的副本
  • 若配置了主键生成逻辑,副本会拥有独立的唯一标识(根据业务需求调整)

关键说明

  • 克隆对象是核心:避免直接修改原对象的Status,确保源列表不会因状态变化移除原项
  • 主键处理:如果GrID是数据库主键,必须生成新的唯一值,否则会引发数据冲突;业务允许重复标识的话可跳过此步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:22:55