我有一個獲取,保存和創建操作的控制器。這些操作將參數作爲項目類型。這只是一個字符串,用於指定我們正在處理的項目的類型。如何從使用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