2010-05-05 86 views
0

我開始學習MVC 2.0,我試圖創建一個測驗的網站:用戶被問及一個問題,並給出了答案的幾個選項。如果他選擇正確的答案,他會得到一些積分,如果他沒有,他會放鬆他們。在哪裏存儲臨時數據在MVC 2.0項目

我試圖做到這一點通過以下方式


    public class HomeController : Controller 
    { 
     private ITaskGenerator taskGenerator = new TaskGenerator(); 
     private string correctAnswer;

public ActionResult Index() 
    { 
     var task = taskGenerator .GenerateTask(); 
     ViewData["Task"] = task.Task; 
     ViewData["Options"] = task.Options; 

     correctAnswer= task.CorrectAnswer; 
     return View(); 
    } 

    public ActionResult Answer(string id) 
    { 
     if (id == correctAnswer) 
      return View("Correct") 

     return View("Incorrect"); 
    } 
} 

但是我有一個問題:當用戶接聽cotroller類重建和我失去正確的答案。那麼存儲正確答案的最佳地點是什麼?我應該爲此創建一個靜態類嗎?
感謝您的幫助!

回答

2

有很多不同的方法可以跨多個請求持久保存數據。

  • 餅乾
  • 數據庫層
  • 視圖狀態(呈現數據向下,並通過它在每個請求備份)

僅舉幾例。其中最簡單的可能是視圖狀態實現。你可以像這樣滾動你自己

<input type="hidden" name="question_1" value="<%=ViewData["question_1"]%>" /> 

這個輸入將在下次提交時重新發布,所以你可以跟蹤值。

public ActionResult Step1Post(string answer) 
{ 
    ViewData["question_1"] = answer; 
    return View("Step2") 
} 

public ActionResult Step2Post(string answer, string question_1) 
{ 
    question_1; // the answer from step 1 
    answer; // the answer from step 2 
} 
+0

當然,如果用戶查看頁面的來源,用戶可以看到正確的答案。 – 2010-05-05 18:53:49

+0

@RexM,不要在頁面上顯示正確的答案。只是用戶輸入的答案。最終驗證應在最後一步之後完成。 – Joel 2010-05-05 20:40:41

0

你也可以將其與一個獨特的密鑰的GUID視圖存儲在會話和存儲只有sessionKey作爲隱藏輸入

實際上它也可能取決於數據量,你會商店

0

聽起來像taskGenerator.GenerateTask()會給你一些類型的任務,但是該任務在任何地方持久? (這個方法從哪裏獲取任務)?

如果存在與任務關聯的ID,則可以在視圖中向下發送taskId,然後在他們回答時再次查看任務。然後您可以從該任務中獲取CorrectAnswer並進行比較。