【问题标题】:How do I duplicate an object?如何复制对象?
【发布时间】:2012-01-03 18:55:31
【问题描述】:

我有一个计划列表,或者其他什么,我不希望其中任何一个被删除。 这就是为什么当有人选择“编辑”选项时 - 我实际上想添加一个具有相同引用的新计划,但只是一个新 ID。然后,我根本不关心在编辑视图(实际上是创建视图)中会对其进行哪些更改。

无论是创建新视图还是编辑视图,我都使用相同的视图,但唯一的区别是,如果该操作有计划 - 我知道它不是创建新视图而是编辑,然后我想在创建视图中显示所有“编辑”计划参数,如果没有任何计划(如果行动没有得到任何计划) - 我知道这是一个全新的计划(有人选择“创建新”选项),然后我想显示相同查看 - 带有空白字段。

这是我的代码:

public ActionResult CreatePlan(Plan? plan)
        {
            if (plan == null)
            {
                return View();
            }
            else 
            {
                Plan oldPlan = db.PlanSet.Single(p => p.Id == plan.Value.Id);
                return View(oldPlan);
            }
        }

目前,如您所见,如果该操作确实获得了一个对象 - 它可以让我编辑旧计划。

如何复制它,以便在视图中进行的任何更改 - 将与另一个计划 ID 一起保存??? 希望我说清楚了,很高兴得到一些帮助!

【问题讨论】:

标签: c# asp.net-mvc-3 duplicates


【解决方案1】:

我想你想要的是:Object.MemberwiseClone()

Object.MemberwiseClone() 创建对象的浅表副本,即它创建一个新对象并从旧对象复制引用(当然,值类型是重复的)。

现在,由于 MemberwiseClone 实际上受到保护,您必须执行以下操作:

public class Plan 
{
    public Plan clone()
    {
        return (Plan)this.MemberwiseClone();
    }
}

【讨论】:

  • 谢谢,我尝试按照您的建议进行操作,但运行时会抛出错误:“方法或操作未实现”。你知道它的含义吗?
  • 很奇怪。你在哪里得到错误?我刚刚用一些虚拟类对此进行了测试,它工作正常。
  • 这对我来说似乎也不错......我在模型中得到了这个错误(在计划类中)
  • 有堆栈跟踪吗?究竟是什么讯息?它可能来自不同的方法。
  • 我添加了这个:内部 BillingPlan MemberwiseClone() { throw new NotImplementedException();这正是我得到错误的地方
【解决方案2】:

给你的Plan类一个拷贝构造函数,而不是返回View(oldPlan)返回View(Plan(oldPlan))

【讨论】:

    【解决方案3】:

    对于我的问题,我根本不需要使用复杂的东西。

    我需要做的就是创建两个获取操作,一个包含空白字段,另一个包含已编辑对象的完整字段。

    这两个视图将它们的参数发送到同一个发布操作,该操作获取发送的对象并将其添加到数据库中。当我写:db.PlanSet.AddObject(plan); - 它会自动添加具有新 ID 的相同对象,而不删除或更改原始对象。

    祝你好运!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2023-03-16
      • 2011-02-04
      • 2019-03-18
      • 2015-03-25
      • 2016-12-24
      相关资源
      最近更新 更多