【问题标题】:RedirectToAction not working along with call to same controller's action through $.ajaxRedirectToAction 不能与通过 $.ajax 调用同一控制器的操作一起工作
【发布时间】:2014-04-02 21:35:38
【问题描述】:

我正在通过 ajax 调用调用名为 RedirectToHome 的控制器操作方法。在该操作方法中,我使用 RedirectToAction 来执行 Spa 控制器的 Index 方法。即使代码成功执行,此重定向也不起作用。我认为这是因为 RedirectToHome 是通过 ajax 调用调用的。这就是为什么当第一个请求的 ajax 调用成功时,我也尝试使用 ajax 调用来调用 Index 方法。但即使通过第二次 ajax 调用,我也看到 Index 方法确实被调用了,但视图从未呈现。控制台中没有错误。

$.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");

    }

【问题讨论】:

  • 如果您的意图是重定向用户请求,您为什么要使用 ajax? Ajax 用于部分页面更新。
  • 因为我想将 javascript 变量(上面代码中的 userEmail)传递给操作方法,所以我必须通过 ajax 调用它,否则我不会使用它。
  • 一个带有查询字符串的简单ActionLink 就可以了。
  • 同意,但是我现在拥有的那种 UI,我不能给用户一个操作链接
  • 告诉我userEmail 的来源。

标签: jquery asp.net-mvc-4


【解决方案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")';
                      }

                    }
                    });
            }
    });

【讨论】:

  • 你可以删除/你在'@Url.Action("Index", "Spa")/'中使用过的。此外,我不希望 url 显示那些查询字符串参数。这些仅在方法中使用。
  • 我正在考虑将这些值存储在 Session 中,这样我就不必在查询字符串中传递它们。
  • document.location.href 确实渲染了视图,所以我正在标记您的答案。
  • 感谢您的标记,但如果重定向有效,则视图渲染不可能无效。如果它不呈现,您确定该动作在重定向后触发?
  • RedirectToAction 不起作用,因为 RedirectToHome 方法是使用 ajax 调用的。重定向不适用于 ajax 请求。但是对于 document.location.href,我们实际上是在调用 action 方法。
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
相关资源
最近更新 更多