2011-08-20 94 views
0

我正在構建一個問題。當用戶點擊多項選擇題的答案時(這是一個單選按鈕),我調用一個操作方法來保存這個答案。我應該在通過AJAX執行操作方法時使用線程嗎?

代碼:

<script language="javascript"> 

$(document).ready(function() { 

    $('.MCQRadio').click(function() { 

     var question_id = $(this).attr('question-id'); 
     var mcq_id = $(this).attr('mcq-id'); 

     $.ajax({ 
      url: '/SaveSurveyAnswers/SaveMCQAnswer', 
      data: { "mcq_id": mcq_id, "question_id": question_id }, 
      success: function (data) { 
      } 
     }); 
    }); 
}); 

的代碼保存答案:

public EmptyResult SaveMCQAnswer(int mcq_id, int question_id) 
    { 
     MCQ_Answers mcqa = null; 
     try 
     { 
      mcqa = db.MCQ_Answers.Single(x => x.question_ID == question_id); 
     } 
     catch (InvalidOperationException e) 
     { 

     } 
     if (mcqa != null) 
     { 
      mcqa.mcq_id = mcq_id; 
     } 
     else 
     { 
      MCQ_Answers mcq_answer = new MCQ_Answers() 
      { 
       question_ID = question_id, 
       respondent_id = 1 
      }; 

      db.MCQ_Answers.AddObject(mcq_answer); 
     } 
     db.SaveChanges(); 
     return new EmptyResult(); 
    } 

如果一個問題有5點答案的可能性,我在上面點擊隨機,快速,然後回到上一頁,即,當我返回正確的答案不會被保存。我應該使用線程來確保正確的答案被保存嗎?如何?

感謝

+0

你確定你實際上在上一頁做了一個*加載*(你可以使用調試器進行檢查)。許多瀏覽器都試圖在導航事件中保存表單值,這會導致像這樣的測試用例出現問題。 –

+0

我剛測試過這個。當我使用瀏覽器後退按鈕時,ActionMethod不會被調用。當我點擊我提供的「返回」鏈接時,它會被調用。儘管如此,當我在快速回答可能性之間進行切換時,無論如何都有可能無法正確保存。 – Nanek

+0

在這種情況下,問題變爲:每次都調用save方法嗎?即使是這樣,有可能在您要求最新答案後纔會保存它。這些問題都不會通過線程修復。作爲一個MVC應用程序,所有請求都在他們自己的線程上提供服務... –

回答

0

,而不是通過郵寄節約你的答案的時候,你可以創建一個JSON對象和JSON內保存的答案。那麼你可以在最後發佈所有完整的答案。

看看這個:http://msdn.microsoft.com/en-us/scriptjunkie/ff962533

基本上這將允許你存儲會話數據 - JSON遠程機器,你那麼只需要一個添加,刪除功能和遠離你去....

我在一個需要更新服務器的對象在畫布上的位置的應用程序中使用它,但是使用sessvars時,我只保留所有的X和Y位置,然後做最後一次JSON我完成了。

如果更改了頁面,則可以從JSON對象中獲取值而無需調用服務器。

作爲一個說明,你也可能更好的選項卡或隱藏的形式部分,並減少需要重新填充說page1,page2等,因爲他們已經在那裏,只是隱藏!

+0

哦,作爲一個說明,sessvars留下,所以即使他們從測驗中導航並稍後回來,您可以重新填充答案...非常好 – davethecoder

+0

沒有最終的按鈕。我的老闆希望它自動保存。如果用戶沒有完成整個調查,你會怎麼做? – Nanek

+0

你可以設置一個計時器,比如說每5分鐘自動保存一次,這樣你就可以獲得兩全其美的好處並保存部分內容! – davethecoder

相關問題