我有一个Action方法,我要么在一个条件下返回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");
,但它没有做任何事情。我正在重定向的动作中的断点不会被击中。
答案 0 :(得分:3)
您需要更改
RedirectToAction("Index", "Group");
到
return RedirectToAction("Index", "Group");
善,
丹
答案 1 :(得分:0)
你应该返回RedirectResult。更改此字符串
if (userRepository.ValidUser(user))
{
RedirectToAction("Index", "Group");
//return Json("Valid");
}
到
if (userRepository.ValidUser(user))
{
return RedirectToAction("Index", "Group");
//return Json("Valid");
}
一切都会正常。
答案 2 :(得分:0)
您遗漏了一份退货声明:
return RedirectToAction("Index", "Group");
Controller.RedirectToAction
方法返回RedirectToRouteResult
和
Controller.Json
方法返回JsonResult
。两者都延伸ActionResult
。
答案 3 :(得分:0)
我认为你的重定向没有达到你想要的地方的原因是它指向一个只接受获取并且你正在重定向帖子的动作。
善,
丹