假设我有一个Child和Parent对象,每个对象都有一个存储库和一个控制器。
更新:父有很多子对象。
父母的创建控制器看起来像。要创建的帖子将使用自动生成的表单。
public ActionResult Create()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Parent parent)
{
var parentRepo = new ParentRepository();
parentRepo.Save(parent);
return View();
}
在创建父级后如何创建子项?
1)一个解决方案是使用像child / create / {idParent}
这样的网址2)甚至将父ID嵌入到子项创建表单中,以便与其余的子数据一起发布。
两者似乎都不符合MVC的精神。
答案 0 :(得分:2)
我会选择替代方案1)
在创建父级的Post版本中,您可以返回RedirectAction以创建子级(并在routeValues中添加idParent)。如果你不喜欢url Child / Create / {idParent},你可能会有类似Parent / {idParent} / CreateChild的内容,具体取决于它与你的控制器设置的匹配程度,以及你的上下文中的主要实体是什么(Child in第一个网址,第二个网址中的父网址。
答案 1 :(得分:0)
如果这个实际需要分为两个步骤,那么我认为你的网址不对。 它允许用户通过点击F5刷新他的浏览器,他仍然可以在刷新后输入数据。显示子对象的错误消息也很容易。
但如果真的需要这个两步过程,我并不感到害羞。如果你有机会在1个动作上构建完整的对象,那将更容易。但我只是在猜测。也许这是一个设计上的决定。