2014-04-01 98 views
0

我正在通過ajax調用調用一個名爲RedirectToHome的控制器的動作方法。在該動作方法中,我使用RedirectToAction來執行Spa控制器的Index方法。即使代碼成功執行,此重定向也不起作用。我認爲這是因爲RedirectToHome通過ajax調用來調用。這就是爲什麼我也嘗試調用索引方法,當ajax調用第一個請求成功時,也使用ajax調用。但即使通過第二次Ajax調用,我看到索引方法確實被調用,但視圖永遠不會呈現。控制檯中沒有錯誤。

$.ajax({ 
      url: '@HttpContext.Current.Request.Url' + "Account/RedirectToHome", 
      data: { email: userEmail }, 
      success: function (data) { 
        $.ajax({ 
        url: '@HttpContext.Current.Request.Url' + "Spa/Index", 
        data: { isAuthenticated:true,email: userEmail }, 
         success: function() { 
        } 
        }); 
      } 
    }); 

public ActionResult RedirectToHome(string email) 
    { 
     if (ValidateDomain(email)) 
      return RedirectToAction("Index", "Spa", new { isAuthenticated = true, email = email }); 
     else 
      return RedirectToAction("ExternalLoginFailure"); 

    } 
+1

如果你的意圖是重定向用戶請求,你爲什麼要做ajax? Ajax用於部分頁面更新。 – beautifulcoder

+0

因爲我想通過javascript變量(userEmail在上面的代碼中),我不得不通過ajax調用它的動作方法,否則我不會使用它。 – user2585299

+1

一個簡單的'ActionLink'與查詢字符串將工作。 – beautifulcoder

回答

1

使用@Url.Action(),不Spa/Index

$.ajax({ 
      data: { email: userEmail }, 
      success: function (data) { 
        $.ajax({ 
        url: '@Url.Action("Index", "Spa")', 
        data: { isAuthenticated:true,email: userEmail }, 
         success: function() { 

         //use your redirect code here, not in action 
         if(result.isValidDomain) 
         { 
         document.location.href = '@Url.Action("Index", "Spa")/' + '?isAuthenticated=' + true; 
         } 
         else 
         { 
         document.location.href = '@Url.Action("ExternalLoginFailure", "Controller")'; 
         } 

        } 
        }); 
      } 
    }); 
+0

謝謝。這有幫助。 – user2585299

+0

我編輯了答案,試試 –

+0

您可以刪除/您在'@ Url.Action(「Index」,「Spa」)/'中使用過的。此外,我不希望URL顯示這些查詢字符串參數。這些僅在該方法內使用。 – user2585299

相關問題