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

Blazor输入字段同时修改原列表与编辑对象的问题求助

Blazor编辑表单修改影响原列表的问题解决

核心问题出在C#的引用类型特性上:你通过listA.Find获取的对象,和listA里存储的元素是同一个内存引用。当你修改subObjectA的属性时,本质上是在直接修改listA里的原对象,所以表格会同步更新,取消操作自然也无法恢复——因为你从始至终都没操作过"副本",一直改的是原始数据。

解决方法分三步:

  • 点击表格行时创建原对象的深拷贝
    不要直接把原对象赋值给subObjectA,而是生成一个完全独立的副本,这样编辑时只会修改副本,不会影响原列表。实现方式有几种:

    1. 手动编写复制构造函数(最直观):
      在你的实体类里添加复制构造函数,逐个复制属性:
      public class Bank
      {
          public int Id { get; set; }
          public string BankName { get; set; }
          // 其他属性
      
          // 复制构造函数
          public Bank(Bank source)
          {
              Id = source.Id;
              BankName = source.BankName;
              // 逐一复制所有需要编辑的属性
          }
      }
      
      然后在点击事件里创建副本:
      private void GetBankDetail(int bankId)
      {
          var originalBank = listA.Find(b => b.Id == bankId);
          // 创建独立副本
          subObjectA = new Bank(originalBank);
          // 启用表单编辑状态
          IsFormEnabled = true;
      }
      
    2. 用序列化反序列化快速生成副本:
      借助System.Text.Json实现深拷贝(适合属性较多的类):
      using System.Text.Json;
      
      private void GetBankDetail(int bankId)
      {
          var originalBank = listA.Find(b => b.Id == bankId);
          var json = JsonSerializer.Serialize(originalBank);
          subObjectA = JsonSerializer.Deserialize<Bank>(json);
          IsFormEnabled = true;
      }
      
  • 取消按钮重置编辑对象
    取消时直接清空subObjectA或重置为空白实例,表单绑定的内容就会恢复初始状态:

    private void CancelEdit()
    {
        subObjectA = null; // 或者 new Bank()
        IsFormEnabled = false;
    }
    
  • 保存时同步原列表数据
    确认修改后,把副本的属性值同步回listA里的原对象:

    private void SaveEdit()
    {
        var targetBank = listA.Find(b => b.Id == subObjectA.Id);
        if (targetBank != null)
        {
            targetBank.BankName = subObjectA.BankName;
            // 同步其他编辑过的属性
        }
        CancelEdit(); // 复用取消逻辑清空表单
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:32:21