2011-03-28 5 views
7

데이터베이스에서 일부 작업을 수행 한 다음 끝나면 종료되는 컨트롤러 동작이 있습니다. 이 작업은 dataType이 'json'으로 설정된 jQuery의 ajax 함수를 통해 호출됩니다.ASP.NET MVC - 반환 개체가없는 Ajax 작업을 처리하는 올바른 방법

조치의 반환 유형을 무효로 설정하면 Firefox에서 "요소를 찾을 수 없습니다"라는 오류 메시지가 콘솔에 표시되는 것을 제외하면 모든 것이 올바르게 작동합니다.

Firefox가 XML이 돌아올 것으로 예상하는 경우이 오류가 발생합니다. 그러나 "text"아약스 호출의 dataType 속성을 변경할 때도 여전히 오류가 나타납니다. 리턴 유형 void에 대한 오류를 없애기 위해 응답의 ContentType을 "text/html"로 설정해야합니다. 또는 반환 형식을 JsonResult로 설정하고 새 [empty] JsonResult 개체를 반환 할 수 있습니다.

나는이 오류를 없앨 수있는 몇 가지 방법이있을 것이라고 확신하지만, 아약스를 통해 호출되는 반환 값이없는 작업을 처리하는 적절한 방법을 알고 싶습니다.

중요한 점은 비동기 컨트롤러 동작 패턴을 사용하고 있습니다.

public void DoSomethingAsync(SomeJsonObjectForModelBinding model) 
{ 
    // do some database things 
} 

public void DoSomethingCompleted() 
{ 
    // nothing to do... 
    // what should my return type be? 
    // do I need to set the content type here? 
} 

답변

11

나는이 정확하게 귀하의 질문에 대답하지 않습니다 알아,하지만 난 당신이 항상 반환 값은 AJAX 또는 웹 서비스 호출에서 돌아 오는 가져야한다고 주장 할 것이다. 조작이 성공했음을 알려주거나 그렇지 않으면 오류 (메시지)를 다시 리턴하는 경우에도. 내가 할 수없는

return new JsonResult { 
      Data = new JsonResultData { Value = returnValue, Success = true } 
      }; 
+1

항상 성공 또는 오류를 반환하기 위해 +1, js 작동 방식에서 정말로 필요합니다. –

+2

나는 이것이 당신에게 무엇을 사는지 알지 못합니다. http 상태는 항상 서버에 의해 반환됩니다. * 당신은 그것이 결코 읽혀지지 않을 것이라는 것을 알고있을지라도 jsoning json serialized 된 데이터를 클라이언트에게 옹호하고 있습니다. 점은 무엇인가? – fearofawhackplanet

+1

음, 시스템 수준의 피드백이 있으며 응용 프로그램 수준의 피드백이 있습니다. AJAX를 성공적으로 실행할 수는 있지만 응용 프로그램 내에서 서버 측에서 문제가 발생했는지는 알 수 없습니다. – Kon

0

을 : 그래서 같은 JsonResultData 래퍼에서 데이터 또는 다른 통화 메타 데이터를 반환하는 데 사용 후

public class JsonResultData 
{ 
    private bool _success = true; 
    public bool Success 
    { 
     get { return _success; } 
     set { _success = value; } 
    } 

    public object Value { get; set; } 
    public List<string> Errors { get; set; } 


    public JsonResultData() 
    { 
     this.Errors = new List<string>(); 
    } 
} 

을 그리고 :

나는 종종이 같은 클래스를 정의 내 평판 때문에 의견을 말하지만 여전히 나는 Kon의 대답에 혼란을 없애기 위해 기여하고 싶었습니다.

응용 프로그램에서 ActionMethod 내에서 모든 예외를 발견하여 HttpStatusCode를 설정하고 응답에 오류 메시지를 추가했습니다. Ajax 오류 함수에서 메시지를 추출하여 사용자에게 보여 주었다.

응용 프로그램이 잘못된 응답 내에서 반환 메시지를 허용하지 않는 일종의 설정이있는 준비 서버에 올려 질 때까지 모든 것이 잘 수행되었습니다. 대신 표준 HTML이 전송되어 응답을 처리하는 JS 오류가 발생했습니다.

결국 내 모든 예외 처리를 성공한 Ajax 호출 (실제로는)로 반환하고 내 애플리케이션 오류를 반환하고 Ajax 성공 함수 내에서 다르게 작성해야한다.

아니요,은 시스템 수준 및 응용 프로그램 수준의 의견을 혼합해야합니다. 응용 프로그램에 필요한 방식으로 시스템 수준의 피드백을 제어하지 못할 수도 있습니다.

관련 문제