当前一个呼叫仍在运行时,AJAX呼叫不会通过MVC控制器在第二次点击时返回

时间:2014-05-27 05:52:26

标签: jquery asp.net-mvc

我在视图上有许多按钮,通过jquery和ajax调用同一个控制器,第一个按钮按下ajax并调用控制器(MVC)但是在此期间单击另一个按钮会导致控制器被解雇但没有被ajax返回/处理?

$.ajax({
        url: '/Downloads/RequestDownload/',
        type: 'post',
        data: { parameter1: obj.data('ou'), parameter2: obj.data('asset'), parameter3: obj.data('report-type'), parameter4: obj.data('appservice'), parameter5: obj.data('filetype') },
        cache: false,
        success: function (data) {
            if(data.indexOf('ERROR') ==-1)
            {
                obj.addClass('blue');
                obj.removeClass('red');
                window.location = '/Downloads/DownloadReport/' + data;
                obj.html(ohtml);
                obj.removeClass('disabled');
            }
        }
});

当它仍在运行上一次呼叫时尝试击中控制器时似乎只是一个问题?

1 个答案:

答案 0 :(得分:0)

假设您在服务器端使用ASP.NET MVC,很可能会遇到ASP.NET会话锁。

默认情况下,对会话的访问限制为一次一个操作。这就是第二个请求被阻止的原因,只要第一个请求仍在运行。

要解决此问题,您可以使用控制器的SessionState属性,将访问模式设置为只读,从而允许并发会话访问:

[SessionState(SessionStateBehavior.ReadOnly)]
public class HomeController : Controller
{
    ....

会话状态行为的可能值可在MSDN documentation

中找到

高级方法是配置session access behavior by action