2011-08-20 21 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

相关问题