2013-02-09 4 views
2

웹 응용 프로그램에 Visual Studio 2010 및 MVC 4를 사용하고 있습니다.ASP.NET MVC Ajax의 내부 오류

공공 ActionResult의 MyController에()

{ 
     if (Request.IsAjaxRequest()) 
     { 
      using (MyContainer context = new MyContainer()) 
      { 
       try 
       { 
        var result = Some Query; 

        return PartialView("_MyView", result); 
       } 
       catch (Exception ex) 
       { 

       } 
      } 
     } 
     if (User.Identity.IsAuthenticated) 
     { 
      return RedirectToAction("Index", "Home", new { area = "User" }); 
     } 
     else 
     { 
      return Redirect("/"); 
     } 
    } 

이 방법은 성공적으로 수행됩니다,하지만 내 아약스 컨테이너가 어떤 일을 표시되지 : 이것은 내 컨트롤러 코드입니다. 방화범이 오류가 발생합니다 :

NetworkError: 500 Internal Server Error + http://localhost....?X-Requested-With=XMLHttpRequest

왜이 오류가 발생합니까?
이 문제를 해결하려면 어떻게해야합니까?
미리 감사드립니다.

+0

디버거를 사용하십시오. – leppie

+0

빈 catch 절이있는 대신 예외가 발생하는지 확인하는 것과 같은 기본적인 문제 해결을 수행 할 수 있습니다. –

+0

웹 설정에서 ''를 설정하고 firebug – nemesv

답변

1

서버에서 제대로 처리되지 않았기 때문에 500 내부 서버 오류 메시지가 여러 가지 방법으로 나타날 수 있습니다. 귀하의 사례에서, 귀하의 MyContainer 유형은 IDisposable 인터페이스를 구현하지 않으므로 using(){ } 블록에서이 유형을 사용할 수 없습니다. 블록을 사용하는 경우 블록을 사용하는 경우이 유형은 IDIsposable을 구현해야합니다. 처리가 끝나면 .NET Framework는 힙과 참조에서 인스턴스를 제거하기 때문에 IDIsposable을 구현해야합니다. 블록을 사용하지 않고 코드를 변경했습니다. 보십시오 :

public ActionResult ActionName() 
{ 
    if (Request.IsAjaxRequest()) 
    { 
     try 
     { 
      MyContainer context = new MyContainer(); 

      var result = Some Query; 
      return PartialView("_MyView", result);  
     } 
     catch (Exception ex) 
     { 
      // return some partial error that shows some message error 
      return PartialView("_Error"); 
     } 
    } 

    if (User.Identity.IsAuthenticated) 
    { 
     return RedirectToAction("Index", "Home", new { area = "User" }); 
    } 

    return Redirect("/"); 
}