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

我找到了几个答案,包括这个和这一个 。 但由于某种原因, this.Response.IsClientConnected仍然true

这是我的客户:

 
Close
@using (Html.BeginForm("List", "Visit", FormMethod.Post, new { @id = "formFilter" })) { //Some models some TextBoxFor etc. } 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(); }); });

这是我的服务器端:

 [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]属性来解决这个问题,我已经尝试过并且没有工作。

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

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

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