我有一种情况,我必须从用户那里获取输入(表格)。按下继续按钮后,将显示下一个视图页面。但是在按下继续之后我不想将模型存储在DB中。我必须根据用户先前给出的输入显示一些细节(组合一些表),并再次从用户获取一些数据。只有这样我才想将模型存储在各自的表中。
我怎么能这样做?我尝试从用户那里获取Model
并传递给生成下一页的函数。这是方法吗?或者还有其他方法吗?
答案 0 :(得分:1)
将第一个表单提交的模型存储在session
。
[HttpPost]
public ActionResult ContinueForm1(Model1 model1)
{
if(ModelState.IsValid)
{
Session["Model1"] = model1;
return View("Form2");
}
return View();
}
[HttpPost]
public ActionResult ContinueForm2(Model2 model2)
{
if(ModelState.IsValid)
{
... model2 is already here, get the model1 from session
... and save to datatbase finally return a different view or redirect to some
... other action
}
return View();
}
答案 1 :(得分:0)
你正走在正确的轨道上。
您需要获取从第一个视图传回的模型 - 最好是在此处使用ViewModel而不是直接绑定到数据库模型。请查看http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/和Why should I use view models?,看看为什么这些都是好事。
最简单的方法是将模型作为参数传递给您的方法,例如
假设您的视图使用相同的ViewModel(可能是也可能不是),那么您可以将viewmodel直接发送到新视图 - 否则您可以将元素复制到新的viewModel中并发送它。
e.g。
[HttpPost]
public ViewResult Step1(MyViewModel viewModel)
{
//Do some validation here perhaps
MySecondViewModel secondViewModel = new MySecondViewModel{
Id = viewModel.Id,
// etc. etc.
};
return View("Step2", secondViewModel);
}
然后,您可以根据需要继续操作,直到您必须将实体持久保存到数据库。 注意,因为您不需要在表单中执行任何特殊操作,只要视图强烈键入该ViewModel,就可以将模型作为参数发布。