我有一个带有获取、保存和创建操作的控制器。这些操作将项目类型作为参数。这只是一个字符串,指定我们正在处理的项目类型。
每个项目类型都有一个子控制器,每个子控制器都实现了具有 Get、Save 和 Create 方法的子控制器接口 (ICildController)。
每个子控制器都根据其类型 (ItemTypeController) 命名。当我从父控制器获取项目时,我可以这样做:
Get(string itemType, int id)
{
return RedirectToAction("Get", itemType, new { id });
}
子控制器中的 Get 方法具有 ActionResult 返回类型(返回 Partival View),因此可以正常工作。
但是,当我保存一个项目时,所有子对象都被创建,然后返回到父对象并存储在其中,以便只能在父对象上执行保存(NHibernate 将处理级联记录)。
如何在不首先实例化所有子控制器的情况下从这些方法返回对象。例如,我希望能够调用 Save(itemType, item)
Save(string itemType, Item item)
{
return RedirectToAction("Save", itemType, new { item });
}
然后我们会找到合适的子控制器(itemTypeController),执行Save(item)方法,然后将item(item)返回给父控制器。
Save(Parent parent)
{
IRepository<Parent> _parent;
var item = new Parent();
item.Id = parent.Id;
item.Children = parent.Children.AddAll(parent.Children.Select(Save(parent.ChildType)); // save each child and add it to the parent's child collection
return _parent.Save(item);
}
Save(Child child)
{
IRepository<Child> _child;
var item = new Child();
item.Id = child.Id;
return _child.Save(item);
}
实现这一目标的最佳解决方案是什么?提前感谢您的帮助。
编辑
我将如何将复杂对象转换为 ViewModel。例如,包含 Child 类型的子项的 Parent 对象。
在 ParentTypeController 我们有:
ParentViewModel ToViewModel(Parent parent)
{
var model = new ParentViewModel();
model.Id = parent.Id;
model.Children = parent.Children.Select(ToViewModel); //Use the ToViewModel method in the ChildTypeController
return model;
}
子类型控制器:
ChildViewModel ToViewModel(Child child)
{
var model = new ChildViewModel();
model.Id = child.Id;
return model;
}