如何复制对象?

时间:2011-11-22 11:23:41

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

我有一个计划列表,或者它是什么,我不希望删除它们中的任何一个。 这就是为什么当有人选择“编辑”选项时 - 我实际上想要添加一个具有相同引用的新计划,但只是一个新的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一起保存??? 希望我清楚自己,并乐意得到一些帮助!

3 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

为您的Plan课程提供复制构造函数,而不是返回View(oldPlan)返回View(Plan(oldPlan))

答案 2 :(得分:0)

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

我需要做的就是创建两个get动作,一个带有空白字段,另一个带有已编辑对象的字段。

两个视图将其参数发送到相同的post操作,获取发送的对象并将其添加到数据库。我写的时候:db.PlanSet.AddObject(plan); -it会自动添加带有新Id的同一个对象,而无需删除或更改原始对象。

祝你好运!!