c# - 当从剑道组合框读取操作的ajax调用时如何处理会话超时
问题描述
使用剑道组合框时如何处理会话超时?
下面是我的剑道组合框的 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 请求时帮我处理它。
解决方案
我通过将完成事件放入 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();
}
}
});
它按我的预期工作。
推荐阅读
- sql-server - Onprem DevOps 服务器 TFS2019 需要为用户配置文件创建报告。特别喜欢的电子邮件报告
- abp - Abp.io 的 Identity Server 可以从 URL 更改租户吗?
- c# - 无法在动态编译的代码中加载 System.ValueTuple
- php - 如何使用池建立 PHP PDO 连接
- azure - 如何使用服务托管标识在 Azure 中使用 Terraform 预配资源
- sql - 从列表中获取未在表列中定义的元素
- java - C# 客户端和 Java 服务器 - 文件上传获取错误数据。(有时)
- java - 插入数据库后preparedstatement停止工作
- java - 如何使用 Java 和 Selenium 运行电子应用程序
- react-native - Openstreetmaps 的 react-native-maps 中的暗模式