Как вернуть 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,
Дэн