Как вернуть JSON или RedirectToAction? - PullRequest
6 голосов
/ 14 мая 2010

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

3 голосов
/ 14 мая 2010

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

RedirectToAction("Index", "Group"); 

до

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

Доброжелательность,

Dan

0 голосов
/ 14 мая 2010

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

Доброжелательность,

Dan

0 голосов
/ 14 мая 2010

Ваш запрос на возврат отсутствует:

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

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

0 голосов
/ 14 мая 2010

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

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

до

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

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

...