У меня есть Метод действия, из которого я или хотел бы возвратить 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");
вы должны вернуть RedirectResult. Измените эту строку
if (userRepository.ValidUser(user))
{
RedirectToAction("Index", "Group");
//return Json("Valid");
}
на
if (userRepository.ValidUser(user))
{
return RedirectToAction("Index", "Group");
//return Json("Valid");
}
, и все будет работать нормально.
Я думаю, причина того, что ваше перенаправление не попадает туда, куда вы хотите, заключается в том, что оно направлено на действие, которое принимает только Gets, а вы перенаправляете сообщение.
Отсутствует оператор возврата:
return RedirectToAction("Index", "Group");
Метод Controller.RedirectToAction
возвращает RedirectToRouteResult
и {{ 1}} Метод Controller.Json
возвращает JsonResult
. Оба расширяют ActionResult
.