我有一个获取,保存和创建操作的控制器。这些操作将参数作为项目类型。这只是一个字符串,用于指定我们正在处理的项目的类型。如何从使用RedirectToAction执行的方法返回对象?
每个这些项目类型都有一个子控制器,每个子控制器都实现了具有Get,Save和Create方法的子控制器接口(IChildController)。
每个子控制器都根据其类型(ItemTypeController)进行命名。当我从我的父控制器获得一个项目,我可以做这样的:
Get(string itemType, int id)
{
return RedirectToAction("Get", itemType, new { id });
}
在孩子控制器GET方法有一个ActionResult返回类型(返回Partival查看)所以这个工作没有问题。
但是,当我保存一个项目时,所有的子项都被创建,然后返回到父项对象并存储在其中,这样就可以对父项进行保存(并且NHibernate将处理级联记录) 。
如何从这些方法中返回对象,而无需首先实例化所有子控制器。例如,我希望能够调用保存(ITEMTYPE,项目)
Save(string itemType, Item item)
{
return RedirectToAction("Save", itemType, new { item });
}
,然后我们会找到合适的子控制器(itemTypeController),执行方法保存(项目),然后返回项目(项目)回到父控制器。
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);
}
达到这个目标的最佳解决方案是什么?预先感谢您的帮助。
编辑
我怎么会去复杂的对象转换成的ViewModels。例如,一个包含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;
}
ChildTypeController:
所有的ChildViewModel ToViewModel(Child child)
{
var model = new ChildViewModel();
model.Id = child.Id;
return model;
}
您的第一个问题提出了一件事,而您的编辑提出了完全不同的问题。这些应该是分开的。 – Yuck 2012-07-09 17:11:20
@ bfir3:你设法让它工作吗?你能否批准下面的答案之一? – 2012-07-12 12:48:28