繁体   English   中英

如何返回JSON或RedirectToAction?

[英]How to either return JSON or RedirectToAction?

我有一个Action方法,我要么在一个条件下返回JSON,要么在另一个条件下重定向。 我认为我可以通过从我的方法返回ActionResult来做到这一点,但这样做会导致错误“并非所有代码路径返回值”

谁能告诉我我做错了什么? 或者如何达到预期的效果?

这是下面的代码:

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Login(User user)
    {
        var myErrors = new Dictionary<string, string>();
        try
            {


                if (ModelState.IsValid)
                {
                    if (userRepository.ValidUser(user))
                    {
                        RedirectToAction("Index", "Group");
                        //return Json("Valid");
                    }
                    else
                    {
                        return Json("Invalid");
                    }

                }
                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");
            }

        }

编辑:澄清一下,我已经尝试过return RedirectToAction("Index", "Group"); 如答案所示,但它没有做任何事情。 我正在重定向到的动作中的断点不会被击中。

你需要改变

RedirectToAction("Index", "Group"); 

return RedirectToAction("Index", "Group"); 

你shold返回RedirectResult。 更改此字符串

if (userRepository.ValidUser(user))
                    {
                        RedirectToAction("Index", "Group");
                        //return Json("Valid");
                    }

if (userRepository.ValidUser(user))
                    {
                        return RedirectToAction("Index", "Group");
                        //return Json("Valid");
                    }

一切都会好起来的。

你遗漏了一份退货声明:

return RedirectToAction("Index", "Group");

Controller.RedirectToAction方法返回RedirectToRouteResultController.Json方法返回JsonResult 两者都扩展了ActionResult

我认为你的重定向没有得到你想要的原因是它指向一个只接受获取的动作,你正在重定向一个帖子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM