6

我有一个操作方法,我想在一个条件下返回 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");按照答案中的建议尝试过,但它没有做任何事情。我重定向到的操作中的断点没有被命中。

4

4 回答 4

3

你需要改变

RedirectToAction("Index", "Group"); 

return RedirectToAction("Index", "Group"); 
于 2010-05-14T09:34:43.740 回答
0

我认为你的重定向没有到达你想要的地方的原因是它指向一个只接受 Gets 的动作,而你正在重定向一个 Post。

于 2010-05-14T11:22:28.797 回答
0

你应该返回 RedirectResult。更改此字符串

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

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

一切都会好起来的。

于 2010-05-14T09:36:14.447 回答
0

您缺少退货声明:

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

Controller.RedirectToAction方法返回 a ,RedirectToRouteResult方法 Controller.Json返回 a JsonResult。两者都扩展ActionResult

于 2010-05-14T09:37:38.423 回答