2012-04-17 63 views
-3

我需要给用户一个机会来查看他输入的内容并在提交数据之前对其进行验证。当用户点击提交表单时,我想将在表单中输入的所有数据显示在单独的页面中。当用户在该页面上单击验证时,数据将返回到最终提交数据的控制器。在最终提交之前显示表单数据(确认视图)

我认为主要的问题是如何将所有表单数据从一个页面移动到另一个页面。

+0

你的具体问题是什么?你有什么尝试? – Tejs 2012-04-17 15:47:55

+0

将其存储在数据库/会话/ cookie中以供日后检索。您使用哪种方式取决于您需要保留数据的时间以及您需要的安全级别。 – 2012-04-17 15:48:04

+1

这篇文章的标题非常糟糕。 “如何解决这个问题”并没有告诉我们什么。请具体说明您的问题的具体内容。 – 2012-04-17 15:48:37

回答

2

一种方法是创建一个新的控制器动作,例如“VerifySubmission”。提交表单应发布到YourController.VerifiySubmission()。 “验证提交视图”显示数据以供用户查看,并将字段写为隐藏的表单字段。在这个“验证”页面上有一个提交按钮,当用户点击它时,POST将隐藏的表单字段添加到最终的“FormSubmit”控制器操作(无论您命名它为何),并将其保存到数据库。

编辑:此外,请更新您的问题的标题,以便它提供了一些你问什么问题的迹象。

+0

对此我感到好奇,是否有一种简单或自动的方式将所有值写入隐藏字段?如果视图模型是可序列化的,我想你可以将整个事件序列化为“验证”视图中的隐藏字段,但我从来没有尝试过。想知道是否有一个更好的,标准的做法。 – 2012-04-17 15:53:45

0

你想要的是将表格发布到控制器。例如,如果您使用的是Index页面提交,控制器代码会是这个样子

public ActionResult Index() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult Verify(FormCollection form) 
{ 
    ViewBag.FormItems = form; 
    return View(); 
} 

[HttpPost] 
public ActionResult Accept(FormCollection form) 
{ 
    // Do whatever you need to do to store the data 
    return View(); 
} 

现在,如果您的用户提交一个是在模型的信息,你要真正使用使用该模型代替FormCollection,并将您的View设置为与该模型相对应的强类型(将它作为强类型模型处理会更容易)。

无可否认,将ViewBag设置为只存储FormCollection是一种懒惰的做事方式,但在没有知道您真正想要做什么的情况下,它会起作用。正如我所说的,使用输入数据的模型可以简化事情并使其更加健壮。

0

在输入数据确认最终提交页面之间传输数据的另一种方法是使用TempData,它允许您在2个请求之间保存状态(通常在SessionState中)。