如何在.net MVC 4中中止长时间运行的Ajax请求?

时间:2015-03-24 14:56:01

标签: jquery ajax asp.net-mvc asp.net-mvc-4 abort

我找到了几个答案,包括this onethis one。但出于某种原因,this.Response.IsClientConnected仍为true

这是我的客户:

<div class="ajax-loader-gif-close" id="cancelBusy">Close</div>

@using (Html.BeginForm("List", "Visit", FormMethod.Post, new { @id = "formFilter" }))
    {
       //Some models some TextBoxFor  etc.
    }

<script type="text/javascript" language="javascript">
    var ajaxCallObject = null;

    $(document).ready(function () {
         $('form').submit(function () {
                ajaxCallObject = $.ajax({
                    url: this.action,
                    type: this.method,
                    data: $(this).serialize(),
                    beforeSend: function () {
                        toggleBusyIndicator();
                    },
                    complete: function () {
                        toggleBusyIndicator();
                    },
                    success: function (result) {
                        //Some stuff
                    }
                });

                return false;
            });
        }
        $("#cancelBusy").click(function () {
             ajaxCallObject.abort();
        });
    });
</script>

这是我的服务器端:

[HttpPost]
public PartialViewResult List(VisitFilterViewModel model)
{
      //IsClientConnected is ALWAYS TRUE even though I abort from client
      while (this.Response.IsClientConnected)
      {
            Thread.Sleep(500);
      }

      return PartialView("PartialVisitFilterList", model);
}

使用FireBug,我看到操作已中止,但IsClientConnected仍为true。我做错了什么?

注意:如果您考虑删除[HttpPost]属性来解决此问题,我已经尝试过并且无法正常工作。

1 个答案:

答案 0 :(得分:0)

感谢this post我终于解决了它! 实际上,我所做的是完全正常工作但是因为我在VS开发的本地计算机上运行它,所以响应从未结束。但是,当我把它放在IIS服务器上时,一切都很顺利。

如果网站或帖子被删除,我在这里发布答案:

  

托管应用程序时,“取消”按钮正常工作   IIS。如果您正在测试VS开发服务器上   Response.IsClientConnected将始终为true。请记住,在   以前版本的RadProgressArea取消不是   在Chrome下工作。对于2014年第二季度,这将得到解决。你可以   测试我们的内部构建。