Как вернуть JSON или RedirectToAction?

У меня есть метод действия, из которого я бы хотел вернуть 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 ответа

Решение

Вам нужно изменить

RedirectToAction("Index", "Group"); 

в

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

Kindness,

Дэн

Вы пропустили ответное заявление:

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

Controller.RedirectToAction метод возвращает RedirectToRouteResult а также Controller.Json метод возвращает JsonResult, Оба расширяются ActionResult,

Вы должны вернуть RedirectResult. Изменить эту строку

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

в

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

и все будет работать нормально.

Я думаю, что причина вашего перенаправления не в том месте, где вы хотите, в том, что оно перенаправляет на действие, которое принимает только Gets, а вы перенаправляете сообщение.

Kindness,

Дэн

Другие вопросы по тегам