【问题标题】:how to handle session timeout when ajax call from kendo combobox read action从剑道组合框读取操作的ajax调用时如何处理会话超时
【发布时间】:2019-12-03 13:15:36
【问题描述】:

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

下面是我的剑道组合框的html代码

@(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 在控制器会话超时发生时调用,我已经编写了自定义属性来检查会话过期并使用以下代码返回 403 状态代码

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

这个返回的状态使用下面的代码在 layout.cshtml 页面中处理并重新加载页面以进入登录页面

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

它适用于所有 ajax 请求,但不适用于来自 kendo 组合框的 ajax 请求。请在剑道组合框 ajax 请求时帮我处理它。

【问题讨论】:

    标签: c# jquery ajax kendo-asp.net-mvc


    【解决方案1】:

    我已通过将完成事件放入 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();
                }
            }
        });  
    

    它按我的预期工作。

    【讨论】:

      猜你喜欢
      • 2011-07-11
      • 2017-12-30
      • 2013-01-20
      • 2014-09-04
      • 2014-03-22
      • 1970-01-01
      • 2013-06-10
      • 2010-11-03
      相关资源
      最近更新 更多