.NET MVC3 /持有临时模型

时间:2012-06-26 07:12:42

标签: asp.net-mvc-3

我有一种情况,我必须从用户那里获取输入(表格)。按下继续按钮后,将显示下一个视图页面。但是在按下继续之后我不想将模型存储在DB中。我必须根据用户先前给出的输入显示一些细节(组合一些表),并再次从用户获取一些数据。只有这样我才想将模型存储在各自的表中。 我怎么能这样做?我尝试从用户那里获取Model并传递给生成下一页的函数。这是方法吗?或者还有其他方法吗?

2 个答案:

答案 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,就可以将模型作为参数发布。

相关问题