如何根据输入在同一方法中返回JsonResult或ActionResult?

时间:2016-03-15 16:54:42

标签: c# asp.net-mvc redirect model-view-controller jsonresult

我遇到需要返回JSONResult或Redirect的情况。 有可能吗?

示例:

public ActionResult Example(string code)
{
  if(string.IsNullorEmpty(code))
    return RedirectToAction("Index", "Home");
  else
    return Json(new { success = true, message= "Next step"});
}

1 个答案:

答案 0 :(得分:3)

是的,这是可能的。事实上,您发布的代码正是您的操作方式!

Controller.RedirectToAction返回RedirectToRouteResultController.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"});
    }
}

在客户端处理它:

if(response.success) {
    // yay
} else if(response.redirectTo) {
    window.location.href = response.redirectTo;
}