2014-04-01 95 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

相关问题