我遇到需要返回JSONResult或Redirect的情况。 有可能吗?
示例:
public ActionResult Example(string code)
{
if(string.IsNullorEmpty(code))
return RedirectToAction("Index", "Home");
else
return Json(new { success = true, message= "Next step"});
}
答案 0 :(得分:3)
是的,这是可能的。事实上,您发布的代码正是您的操作方式!
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"});
}
}
在客户端处理它:
if(response.success) {
// yay
} else if(response.redirectTo) {
window.location.href = response.redirectTo;
}