我正在从Windows窗体背景转向MVC 4和EF,我很难从架构/编码的角度理解某些东西。
我有一个用于创建/编辑工单的应用。有一个工作订单头记录,其中有多个其他记录连接到标题 - 工作任务,客户数据,作业设计数据等。我想同时创建所有这些记录,即使数据将通过多个屏幕输入我理解在同一个控制器中有几个视图。
我遇到的问题是保留每个视图中的数据,然后在视图结束时进行最终保存。现在我试图通过使用TempData在视图之间传递数据来做到这一点。有一个更好的方法吗?即使我在Windows窗体应用程序中使用了Entity Framework,我也可以保留db上下文并继续向其添加记录,直到我结束并执行db.SaveChanges()。有没有办法在控制器中执行此操作,还是必须在临时数据中或通过视图中的参数传递db上下文?
我必须遗漏一些东西,因为许多应用程序需要能够对多个记录进行更改,并且尝试在单个视图中调整每个字段是不合理的。
任何建议都非常赞赏!
百里
答案 0 :(得分:1)
如果你想要一个听起来像你的巫师风格界面,我会创建一个视图模型,它能够保存工作单所需的所有信息。
为简单起见,我们说有3个视图。为什么要发布视图,只需将视图模型中的信息发送到下一个视图即可。确保您将信息保存到页面上的隐藏字段,以便将其发回到下一个帖子中。
以下是我在控制器操作中要做的一个示例:
[HTTPPost]
public ActionResult StepOne(ComprehensiveViewModel model)
{
// manipulate model as required
// notice we pass the partially completed model on to the next view
return View("StepTwo", model);
}
然后在StepTwo视图中:
//Hiddens for the data you want to preserve from StepOne
@Html.HiddenFor(model=> model.SomeStepOneProperty) // etc.