2016-03-15 51 views
3

我有一种情况,我需要返回一个JSONResult或重定向。 这可能吗?如何根据输入以相同方法返回JsonResult或ActionResult?

例子:

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

是的,有可能同时返回,因为他们是'ActionResults'。但是,如果您在Ajax调用中返回'RedirectToAction',它将不会重定向。这是你的问题吗? –

回答

3

是的,这是可能的。事实上,你发布的代码就是你如何做的!

Controller.RedirectToAction返回a 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; 
} 
+0

此方法可能是首选,但是您可以*返回JsonResult或RedirectToAction。尽管您必须让Ajax调用的成功/失败/完成功能能够检查响应是返回的视图还是json对象。否则,回调函数将不知道是否渲染内容,将哪个DOM元素插入其中,还是只能根据Json执行一些逻辑。 – Erik

+0

但是在哪种情况下我们可以在单一方法中同时使用?事实上呢? –