当 ajax 从 kendo 组合框读取操作调用时如何处理会话超时

how to handle session timeout when ajax call from kendo combobox read action

使用 kendo 组合框时如何处理会话超时?

下面是我的 html 代码 kendo combobox

@(Html.Kendo().ComboBoxFor(model => model.PropertyName)
                              .AutoBind(true)
                              .Suggest(true)
                              .DataTextField("Text")
                              .DataValueField("Value")
                              .DataSource(source =>
                              {
                                  source.Read(read =>
                                  {
                                      read.Action("ActionName", "ControllerName");
                                  })
                                  .ServerFiltering(true);
                              })
                              .Animation(false)
                              .Filter("contains")
                              .HighlightFirst(false)                              
                )

当时在控制器中调用 read.Action 时发生会话超时,我编写了自定义属性来检查会话过期和 return 403 状态代码使用下面的代码

if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
                    {
                        filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Forbidden");
                        return;
                    }

并且此 returned 状态在 layout.cshtml 页面中使用以下代码处理并重新加载页面以转到登录页面

$.ajaxSetup({
        error: function (x, e) {
            if (x.status == 403) {
                window.location.reload();
            }
        }
    });

它适用于所有 ajax 请求,但当来自 kendo 组合框的 ajax 请求时无效。请在 kendo 组合框 ajax 请求时帮助我处理它。

我通过将完成事件放入 ajaxsetup 中解决了这个会话超时问题。当 ajax 请求从 kendo 发生时,当响应得到 403 时,它不会认为是错误它调用完成事件而不是调用错误事件所以在将完成事件页面重定向到登录页面后

$.ajaxSetup({
        error: function (x, e) {
            if (x.status == 403) {

                window.location.reload();
            }
        },
        complete: function (x, e) {
            if (x.status == 403) {

                window.location.reload();
            }
        }
    });  

一切如我所料。