ReturnUrl在MVC中不起作用

时间:2014-02-18 13:57:40

标签: jquery asp.net-mvc-4

我的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;
                   }

           }

2 个答案:

答案 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);
  }
}

(未经测试)