我的MVC应用程序在20分钟后超时。即,当我在20分钟后自动点击任何按钮时,应用程序将被重定向到登录页面。我页面中的所有按钮都使用Ajax调用,因此当我们点击任何按钮时,ajax将返回失败代码并重定向到登录页面。
问题:如果我在页面中间有一些搜索条件和分页,当我在超时后再次登录时,我无法在超时之前到达我所在的确切页面。当我在按钮点击时使用Ajax调用时,我无法在Url上看到搜索参数或页码。请有人帮忙解决这个问题。
On Timeout Ajax返回以下错误状态并重定向到登录页面。
error: function (xhr, ajaxOptions, thrownError) {
if (xhr.status == 401) {
window.location.href = "/Home/Logout";
return;
}
}
答案 0 :(得分:2)
您可以使用历史记录API来跟踪您所在的确切网址。您必须将它在路径/控制器中映射回所需的页面。
查看history.js,让生活更轻松:
当您点击导致您想要“记住”的AJAX呼叫的任何链接/按钮时,您必须调用此API。
来自SO的示例:
function search(params) {
// record your current UI position
// data (to save), title (to set on page), url (to set on page)
History.pushState({ params: params }, "Search", "?search");
// now run whatever should happen because client triggered search()
}
您必须在每次操作时更新网址。然后,在Logoff
操作中,将当前网址添加为ReturnUrl
网址中的Logoff
参数,这样就可以了。
答案 1 :(得分:0)
由于您使用ajax调用来执行搜索而不是URL,因此您可以将cookie与history.js一起使用,以在注销前重复上次搜索。
在搜索按钮中,单击JS处理程序:
function search(params) {
// record your current UI position
// data (to save), title (to set on page), url (to set on page)
History.pushState({ params: params }, "Search", "?search");
// Ajax call here to do your search
}
在重定向之前在您的登录操作中创建一个Cookie:
Response.Cookies.Add(new HttpCookie("UserLogin"));
添加一个document.ready JS函数来检查" UserLogin" cookie存在,如果它存在
if (cookieExists("UserLogin")){
removeCookie("UserLogin");
var State = History.getState();
if (State.url == "?search") {
search(data.params);
}
}
(未经测试)