2012-04-17 56 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中)。