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