2016-01-20 108 views
0

我正在对控制器进行ajax调用。如果执行成功,控制器将返回一个字符串,如果发现错误,控制器将返回一个局部视图。我迫使它失败,但它仍然进入ajax的成功事件。C#mvc - 控制器返回部分视图或json数据

如何让它在失败时显示局部视图或者只是在成功时提醒字符串值?

Ajax调用:

$.ajax({ 
    url: '@Url.Action("GetItem","Home")', 
    data: { }, 
    success: function (result) { 
     alert(result); 
    }, 
    error: function (result) { 
     $(".MyDiv").html(result); 
    } 
}) 

控制器:您提供仿佛请求失败Ajax调用的参数error将被称为

public ActionResult GetItem([DataSourceRequest]DataSourceRequest request) 
{ 
    try 
    { 
     throw new Exception("ERROR"); 

     //return Json("Success", JsonRequestBehavior.AllowGet); 
    } 

    catch (Exception ex) 
    { 
     AlertMessage alertMessage = new AlertMessage(); 
     alertMessage.MessageText = "A critical error has occurred, please contact your administrator."; 
     alertMessage.ErrorMessageText = ex.ToString(); 
     alertMessage.MessageHeading = "Critical Error"; 

     return PartialView("~/Views/Common/ErrorMessageDisplay.cshtml", alertMessage); 
    } 
} 

回答

1

功能。这意味着响应状态代码是40 *或50 *代码之一。

但是,当您从控制器返回PartialView时,实际响应的状态代码200为“OK” - 这就是为什么成功函数被调用的原因。

您可以通过在return PartialView(...之前添加Response.StatusCode = 500;来修改您的控制器代码,并且这应该可以做到。

+2

或者我认为更好的一个选择是返回一个成功标志(成功时为'success = true'),并在ajax调用的成功事件中使用它,并仅使用错误事件意外的错误。 – ataravati

+1

当然。返回响应主体*和* 500状态是100%不适当的。 –

+0

@ChrisPratt根据W3C规范 - 500状态码响应有一个主体没有任何问题。请参阅https://www.w3.org/Protocols/HTTP/HTRESP:“*正文部分可能包含描述错误的文档,描述错误的可读形式。*” –