2014-05-22 4 views
1

내 asp.net mvc 컨트롤러에서 작업을 호출하는 단추를 작업하고 있습니다. 오류를 잡아 내 사용자에게 알맞게 표시하려고 노력하고 있지만 제대로 수행하는 방법을 파악할 수 없습니다. 내 컨트롤러에서 예외 (테스트 목적으로)를 강제로 수행 할 때마다 내 ajax 호출의 .sucess 부분이 여전히 해고되었습니다. 여기 내 아약스 호출의 : 이미지가 삭제되지 않은 경우에도,컨트롤러에 jquery ajax를 호출하여 예외가 발생하지 않는 이유는 무엇입니까?

[HttpGet] 
public ActionResult DeleteImage(int unitId) 
{ 
    try 
    { 
     throw new Exception("Forced error"); 
     UnitClient.UpdateUnitImage(unitId, new byte[0]); 
    } 
    catch (Exception e) 
    { 
     Log.Error(e); 
     return Json(new { e.Message }, JsonRequestBehavior.AllowGet); 
    } 

    return Json(new JsonResult(), JsonRequestBehavior.AllowGet); 
} 

성공 항상 호출됩니다 : 여기

$(document).ready(function() { 
    $("#del").on("click", function() { 
     var message; 
     $.ajax({ 
      url: "@Url.Action("DeleteImage", "UnitSummary")", 
      type: "GET", 
      dataType: "json", 
      data: { unitId: "@Model.UnitId" }, 
      error: function(msg) { 
       message = msg; 
       $('#delsection').hide().html('<div class="alert alert-danger"><strong>Ouch!</strong> ' + message.statusText + '</div>').fadeIn('slow'); 
      }, 
      success: function(msg) { 
       message = msg; 
       $('#delsection').hide().html('<div class="alert alert-success"><strong>Success!</strong> Image was deleted.</div>').fadeIn('slow'); 
      } 
     }); 
    }); 

을 그리고 나의 컨트롤러입니다. 내가 여기서 무엇을 놓치고 있니?

+1

글쎄, 당신은 예외를 잡아와'JsonResult'를 반환합니다. ajax 호출의 결과는 항상'200'이 될 것이므로'success' 메서드가 호출됩니다. – Zabavsky

답변

2

내 컨트롤러에서 예외를 강제로 수행 할 때마다 ( ) 내 ajax 호출의 .sucess 부분이 여전히 실행됩니다.

다음의 코드는 예외가되지 않는 서버에서 오류 응답합니다 (error 콜백에 따라서 어떤 전화), 같은 jQuery의 ajax 해석 하지만 정기적 200 OK 응답 :

return Json(new { e.Message }, JsonRequestBehavior.AllowGet); 

대신 이런 식으로 작업을 수행 :

return new HttpStatusCodeResult(HttpStatusCode.BadRequest, e.Message); 

이것은 HTTP 상태 코드가 작동하는 곳입니다. BadRequest은 HTTP 오류 상태 코드입니다. HTTP가 상태 (400)에 상당

BadRequest 요청이 서버에 의해 이해 될 수 없다는 것을 나타낸다 :

여기서 더 BadRequest 관하여. 다른 오류가 적용되지 않거나 정확한 오류를 알 수 없거나 에 자체 오류 코드가없는 경우 BadRequest가 전송됩니다.

관련 문제