为什么在asp.net mvc中会话超时后jquery ajax调用失败?
当我的会话变量中有一个值时,我的ajax调用可以正常工作...但是当会话超时时,它似乎无法返回空json结果...
public JsonResult GetClients(int currentPage, int pageSize)
{
if (Session["userId"]!=null)
{
var clients = clirep.FindAllClients(Convert.ToInt32(Session["userId"])).AsQueryable();
var count = clients.Count();
var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize);
var genericResult = new { Count = count, Results = results ,isRedirect=false};
return Json(genericResult);
}
else
{
var genericResult = new {redirectUrl = Url.Action("Create", "Registration"), isRedirect = true };
return Json(genericResult);
}
}
但是其他部分似乎不起作用... 。
success: function(data) {
alert(data.Results);
if (data.isRedirect) {
window.location.href = data.redirectUrl;
}
}
编辑:
我的global.asax有这个,
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Clients",
"Clients/{action}/{id}",
new { controller = "Clients", action = "Index", id = "" }
);
routes.MapRoute(
"Registrations",
"{controller}/{action}/{id}",
new { controller = "Registration", action = "Create", id = "" }
);
}
when there is a value in my session variable my ajax calls work properly... But when a session is timedout it doesn't seem to work returning empty json result....
public JsonResult GetClients(int currentPage, int pageSize)
{
if (Session["userId"]!=null)
{
var clients = clirep.FindAllClients(Convert.ToInt32(Session["userId"])).AsQueryable();
var count = clients.Count();
var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize);
var genericResult = new { Count = count, Results = results ,isRedirect=false};
return Json(genericResult);
}
else
{
var genericResult = new {redirectUrl = Url.Action("Create", "Registration"), isRedirect = true };
return Json(genericResult);
}
}
However else part does'nt seem to work....
success: function(data) {
alert(data.Results);
if (data.isRedirect) {
window.location.href = data.redirectUrl;
}
}
EDIT:
My global.asax has this,
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Clients",
"Clients/{action}/{id}",
new { controller = "Clients", action = "Index", id = "" }
);
routes.MapRoute(
"Registrations",
"{controller}/{action}/{id}",
new { controller = "Registration", action = "Create", id = "" }
);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试重定向无论响应是什么:
如果重定向,您可以消除这种可能性
然后尝试显式比较变量并暂时保持 URL 硬编码:
您还可以查看
data.redirectUrl
返回Comke之后回到我身边...
Try to redirect whatever the response is:
if that redirects, you can eliminate that possibility
Then try to explicitely compare the variable and keep the URL hardcoded for the moment:
You can also see what
data.redirectUrl
returnsComke back to me after that...
如果 Session 超时,则 Session 对象将为空。您尝试访问此对象而不检查它是否存在,这将引发异常。
你有“onError”回调函数设置吗?
If the Session has timed out out then the Session object will be null. You are attempting to access this object without checking if it exists which will be throwing an exception.
Do you have an "onError" callback function setup?