2014-11-25 2 views
0

기본 Func을일반 Func <T>을 통해 JsonResult를 반환하는 방법?

public class HomeController: BaseController 
{ 
    public JsonResult HomeController() 
    { 
     var model = ExecuteHandledJTableJsonOperation(() => 
      { 
       //do some stuff 
      }, LocalResources.CommonErrorMessage); 
     return Json(model); 
    } 
} 

내가 반환 JSON으로 시도 할 때 Func을

public class BaseController : Controller 
{ 
    public T ExecuteHandledJTableJsonOperation<T>(Func<T> actionToExecute, string errorMessage) 
    { 
     try 
     { 
      return actionToExecute.Invoke(); 
     } 
     catch (Exception ex) 
     { 
      LogEntry entry = new LogEntry(); 
      entry.AddErrorMessage(ex.Message); 
      entry.AddErrorMessage(String.Format("Inner Exception:", ex.InnerException.Message)); 
      //entry.Message = ex.Message; 
      entry.Priority = 1; 
      entry.EventId = 432; 
      entry.Severity = System.Diagnostics.TraceEventType.Error; 
      writer.Write(entry); 
      return Json(new { Result = "ERROR", Message = errorMessage }); 
     } 
    } 
} 

그것은 나에게 오류를 검색 기대하는 기본 방법을 기대하는 방법 (새를 {사용하는 작용을 갖는 Result = "ERROR", Message = errorMessage});

암시 적으로 'T'

나는이 작업을 하나의 실행 것으로 예상 ExecuteHandledJTableJsonOperation의 재정의를 만드는 경우가 더 잘 알고/반환에 유형 'System.Web.Mvc.JsonResult을'변환 할 수 없습니다 일반적으로 작업에 excetion이있을 때 실행할 두 번째 작업입니다. 이 같은

뭔가 :

return ExecuteHandledJTableJsonOperation(() => 
{ 
    //do something 
    return Json(new { Result = "OK", Records = excepciones, TotalRecordCount = excepciones.Count() }); 
},() => 
{ 
    return Json(new { Result = "ERROR", Message = Properties.Resources.CommonErrorMessage }); 
}); 

하지만 첫 번째 경우 해결하는 방법을 알고 싶어 암시 'T'
덕분에 유형 'System.Web.Mvc.JsonResult을'변환 할 수 없습니다를 .

답변

0

항상 JsonResult을 반환하려는 것처럼 메서드가 일반적으로 왜 그런지 완전히 명확하지 않습니다.

public class BaseController : Controller 
{ 
    public JsonResult ExecuteHandledJTableJsonOperation<T>(Func<JsonResult> actionToExecute, string errorMessage) 
    { 
     try 
     { 
      return actionToExecute.Invoke(); 
     } 
     catch (Exception ex) 
     { 
      LogEntry entry = new LogEntry(); 
      entry.AddErrorMessage(ex.Message); 
      entry.AddErrorMessage(String.Format("Inner Exception:", ex.InnerException.Message)); 
      //entry.Message = ex.Message; 
      entry.Priority = 1; 
      entry.EventId = 432; 
      entry.Severity = System.Diagnostics.TraceEventType.Error; 
      writer.Write(entry); 
      return Json(new { Result = "ERROR", Message = errorMessage }); 
     } 
    } 
} 
0

내 생각에 soo generic이 필요하지 않습니다. 당신이 당신의 행동에만 그것을 사용할 것이라면, ActionResultJsonResultderived from it으로 돌려 줄 수 있습니다. ActionResult의 constraint을 추가하는 것이 충분하다고 생각하십시오.

public T ExecuteHandledJTableJsonOperation<T>(Func<T> actionToExecute, string errorMessage) 
    where T: ActionResult 
{ 
    //code 
} 
관련 문제