Да, это возможно. Фактически, код, который вы опубликовали, точно так же, как вы это делаете!
Controller.RedirectToAction
возвращает RedirectToRouteResult
, Controller.Json
возвращает JsonResult
. Они оба наследуют от ActionResult
, поэтому возвращение их как ActionResult
будет работать нормально.
Если вы работаете с AJAX:
Даже если вы не сказали, что ваш вызова контекст был, как уже упоминалось в insightful comment by Thiago Ferreira, перенаправляет не работают с AJAX. Вам необходимо вернуть сообщение об ошибке, а затем обработать его на стороне клиента.
Например о способе действия:
public ActionResult Example(string code)
{
if(string.IsNullorEmpty(code))
{
UrlHelper urlHelper = new UrlHelper(HttpContext.Request.RequestContext);
string actionUrl = urlHelper.Action("Index", "Home");
return Json(new { success = false, message = "Code not provided", redirectTo = actionUrl});
}
else
{
return Json(new { success = true, message= "Next step"});
}
}
Handling его на стороне клиента:
if(response.success) {
// yay
} else if(response.redirectTo) {
window.location.href = response.redirectTo;
}
Да, можно вернуться и, так как они являются 'ActionResults'. Но если вы вернете «RedirectToAction» внутри Ajax Call, он не будет перенаправлен. Это твоя проблема? –