0

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

4

2 回答 2

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();
}
于 2012-06-26T09:25:39.973 回答
0

你正朝着正确的方向前进。

您需要获取从第一个视图传回的模型 - 最好在此处使用 ViewModels,而不是直接绑定到您的数据库模型。看看http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/为什么要使用视图模型?至于为什么这些都是好东西。

最简单的方法是将模型作为参数传递给您的方法,例如

假设您的视图使用相同的 ViewModel(这可能是也可能不是),那么您可以将视图模型直接发送到您的新视图 - 否则您可以将元素复制到新的视图模型中并发送。

例如

[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 的强类型。

于 2012-06-26T09:34:07.147 回答