【问题标题】:jQuery preventing RedirectToAction from working?jQuery 阻止 RedirectToAction 工作?
【发布时间】:2011-02-23 15:00:01
【问题描述】:

如果用户成功登录,我会尝试重定向用户,但我页面上的代码似乎阻止了重定向工作。如果我删除重定向工作下面的 jQuery。有人可以告诉我,如果我做错了什么吗?谢谢

我有以下操作:

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Login(User user)
        {
            var myErrors = new Dictionary<string, string>();
            try
            {
                if (ModelState.IsValid)
                {
                    if (userRepository.ValidUser(user))
                    {
                        return RedirectToAction("Index", "Group", new {page = (int?)null});

                    }
                    else
                {
                        return Json("Username or password seems to be incorrect");
                    }
                }
                else
                {
                    foreach (KeyValuePair<string, ModelState> keyValuePair in ViewData.ModelState)
                    {
                        if (keyValuePair.Value.Errors.Count > 0)
                        {
                            List<string> errors = new List<string>();

                            myErrors.Add(keyValuePair.Key, keyValuePair.Value.Errors[0].ErrorMessage);
                        }

                    }
                    return Json(myErrors);
                }
            }
            catch (Exception)
            {
                return Json("Invalid");
            }

        }

以及我页面上的以下代码:

<script language="javascript" type="text/javascript">
    $(document).ready(function() {
        $("#SaveSuccess").hide();
        $("#btnLogin").click(function() {

            $("form").submit(function(event) {
                var formData = $(this).serialize();
                $.post($(this).attr("action"), formData, function(res) {
                    ShowErrors(res); 
                    if (res == true) {

                        $("#SaveSuccess").text("Saved");
                    }
                    else {
                        $("#divError").html(res);
                    }
                    $("#SaveSuccess").fadeIn(100);
                }, "json");
                return false;
            });
        });
    });
</script>

【问题讨论】:

标签: jquery asp.net-mvc redirecttoaction


【解决方案1】:

你应该看看this question,你的问题是它发送一个 302(IIRC,它很早)来响应 AJAX 请求,而不是整个页面请求,所以你需要寻找那个标题并重定向找到整个页面。

最佳答案中的方法可能与跨浏览器一样简洁,只需返回带有重定向 url 的 JSON 并重定向到该 url,如下所示:

        $("form").submit(function(event) {
            var formData = $(this).serialize();
            $.post($(this).attr("action"), formData, function(res) {
                if (res.redirect) {
                  window.location.href = res.redirect;
                  return;
                }
                ShowErrors(res); 
                if (res == true) {
                    $("#SaveSuccess").text("Saved");
                }
                else {
                    $("#divError").html(res);
                }
                $("#SaveSuccess").fadeIn(100);
            }, "json");
            return false;
        });

在 C# 端,类似这样的东西而不是重定向:

return JSon({redirect = Url.Action("Index", "Group", new {page = (int?)null})});

【讨论】:

    【解决方案2】:

    这很可能是因为您在 jquery 代码的末尾添加了return false;,或者您的 jquery 代码中可能有一些错误,但是您也可以像这样重定向用户:

    window.location = 'url-here';
    

    document.location.href = 'url-here';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多