2016-01-20 106 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:「*正文部分可能包含描述錯誤的文檔,描述錯誤的可讀形式。*」 –