Asp.net mvc 3 在通过AJAX执行操作方法时是否应该使用线程?

Asp.net mvc 3 在通过AJAX执行操作方法时是否应该使用线程?,asp.net-mvc-3,Asp.net Mvc 3,我正在建立一个问题库。当用户点击一个选择题的答案时(这是一个单选按钮),我调用一个动作方法来保存这个答案 守则: <script language="javascript"> $(document).ready(function () { $('.MCQRadio').click(function () { var question_id = $(this).attr('question-id'); var mcq_id = $(this

我正在建立一个问题库。当用户点击一个选择题的答案时(这是一个单选按钮),我调用一个动作方法来保存这个答案

守则:

<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) {
            }
        });
    });
});
如果一个问题有5个答案,我随机快速点击它们,然后返回上一页,即返回正确答案时不会保存。我应该使用线程来确保保存正确的答案吗?怎么做


谢谢

您可以创建一个JSOn对象并将答案保存在JSOn中,而不是一直通过post保存答案。然后,您可以在最后一次性发布所有已完成的答案

看看这个:

基本上,这将允许您在远程机器上存储会话数据-json,然后您只需要添加、删除功能,然后就可以开始了

我在一个应用程序中很大程度上使用了这一点,该应用程序需要使用画布上对象的位置来更新服务器,但是使用sessvars,我只是将所有的X和Y位置保留在画布上,并在完成后最后推送JSON

如果更改页面,则无需服务器调用即可从JSON对象获取值


请注意,您最好使用选项卡或隐藏表单的部分,这样可以减少重新填充的需要,例如page1、page2等,因为它们已经存在,只是隐藏了

您确定您实际上正在上一页上进行加载(您可以使用调试器进行检查)。很多浏览器都试图在导航事件中保存表单值,这可能会在类似这样的测试用例中导致问题。当我使用浏览器后退按钮时,不会调用ActionMethod。当我点击我提供的“返回”链接时,它被称为。尽管如此,当我在答案可能性之间快速切换并返回任意一种方式时,有时它们无法正确保存。在这种情况下,问题变成:是否每次都调用save方法?即使是这样,也有可能是在您请求最新答案后保存的。不过,这些问题都不会通过线程解决。作为一个MVC应用程序,所有的请求都在它们自己的线程上提供服务…我应该做什么来确保所有答案都被正确保存?哦,作为一个提示,sessvars会保留下来,所以即使它们离开了测试,稍后再回来,你也可以重新填充答案。。。非常好,没有最后的按钮。我的老板希望它能自动保存。如果用户没有完成整个调查,你会怎么做?你可以设置一个计时器,比如说每5分钟自动保存一次,这样你就可以同时获得最佳效果和部分内容的保存!
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();
    }