2014-02-18 89 views
1

我的MVC應用程序在20分鐘後會超時。即,當我自動點擊任何按鈕20分鐘後,應用程序將被重定向到登錄頁面。我的頁面中的所有按鈕都使用Ajax調用,因此當我們單擊任何按鈕時,ajax將返回失敗代碼並重定向到登錄頁面。ReturnUrl無法在MVC中工作

問題:如果我在頁面中間有一些搜索條件和分頁,當我在超時後再次登錄時,我無法到達超時前的確切頁面。由於我在按鈕點擊時使用Ajax調用,因此我無法在Url上看到搜索參數或頁碼。請有人可以幫忙。

On Timeout Ajax返回以下錯誤狀態並重定向到登錄頁面。

error: function (xhr, ajaxOptions, thrownError) { 
        if (xhr.status == 401) { 
         window.location.href = "/Home/Logout"; 
         return; 
        } 

      } 

回答

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() 
} 

必須更新在每個動作的URL。然後,在Logoff操作中,將當前網址作爲ReturnUrl參數添加到您的Logoff網址中,並且它將起作用。

+0

謝謝帕特里克。我如何在我的案例中使用history.js文件。即超時後,再次登錄時導航到精確的頁面。 – VVR147493

+0

@vishnureghu:查看底部的更新文本。 –

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功能檢查,如果 「用戶登陸」 cookie存在,如果是這樣則

if (cookieExists("UserLogin")){ 
    removeCookie("UserLogin"); 
    var State = History.getState(); 

    if (State.url == "?search") { 
    search(data.params); 
    } 
} 

(未測試)