2010-01-18 7 views
0

최근에 내가 게시 한 것으로 보이는 것은 JSON을 사용하는 ASP.NET MVC입니다. 그러나, 내가 설명 할 수없는 이상한 일들이 계속 일어나고있다. 내보기에이 수신에 관해서 그러나 때ViewModels의 JSON 객체를 반환하는 ASP.NET MVC

public JsonResult GetAllUserTasksForStage(int StageID, string Username) 
{ 
    var uM = ManagerProvider.GetUserManager(); 
    var tM = ManagerProvider.GetTaskManager(); 
    var tasks = tM.GetAllUserTasks(StageID, uM.GetUser(Username).ID); 
    // GetAllUserTasks returns IEnumerable<TaskViewModel> 
    // Encode this into Json and return it 
    return Json(tasks, JsonRequestBehavior.AllowGet); 
} 

이 방법은 성공적으로 완료, 문제가 발생 :

은 내가 JsonResult을 반환하는 컨트롤러의 방법이있다. 나는 $ .post (...)와 $ .getJSON (...)을 모두 사용하여 시도했다. $ .post()에 대해 JsonRequestBehavior를 Controller 메소드에서 제거했다.

jQuery 문서 읽기 $ .post와 $ .getJSON의 콜백 함수는 결과가 유효한 JSON 인 경우에만 실행된다는 것을 알았습니다. GetAllUserTasksForStage의 반환 된 결과에 문제가 있다고 생각합니다. 하지만 결코 TaskViewModel를 반환하지 않습니다 -

public class TaskViewModel 
{ 
    public int ID { get; set; } 
    public UserViewModel Assignee { get; set; } 
    public DateTime Created { get; set; } 
    public UserViewModel Creator { get; set; } 
    public DateTime Due { get; set; } 
    public string TaskDescription { get; set; } 
    public string TaskTitle { get; set; } 
    public bool Completed { get; set; } 
    public StageViewModel Stage { get; set; } 
    public IEnumerable<TaskAuditViewModel> TaskAudits { get; set; } 
} 

그것은 날 완전히 난처한 상황에 빠진거야 내가 $ .post와 아무런 문제와 같은보기를 여러 번에 $ .getJSON을 사용했습니다 같은 :로

TaskViewModel 클래스가 정의됩니다.

아이디어가 있으십니까?

감사합니다,

크리스

+0

"문제가 발생합니까?" 더 구체적으로 좀 해주실 수 있습니까? Firebug 또는 Fiddler에서 JSON을 검사 해 보셨습니까? –

+0

$에 주어진 콜백 함수.post()와 $ .getJSON이 실행되지 않아 잘못된 JSON이 반환된다는 것을 의미합니다. 그러나 이것이 잘못된 JSON 인 이유를 알지 못합니다. – Chris

+0

문제의 유형에 대해 누군가가 적절하게 설명 할 수 있도록 생성되는 오류의 유형을 지정해야합니다. – Israfel

답변

0

나는 약간의 문제를 분해 추천 할 것입니다. 계속하는 일이 너무 많습니다. 먼저 간단한 JSON 객체를 반환 해보십시오. 이렇게하면 JavaScript/전송이 올바른지 확인할 수 있습니다. 그런 다음 천천히 객체를 반환 유형으로 도입하십시오. 이렇게하면 JSON이 유효하지 않은 곳을 스스로 결정할 수 있습니다.

0

브라우저 URL (jQuery 부분 생략)에서 Json 메서드를 직접 호출하여 얻은 결과를 확인하십시오. 나는 당신이 아마도 jQuery 아약스와 같은 일을하고 있다고 생각한다. 그래서 직접 호출 해보십시오. 이것은 대개 일반 오류 메시지를 나타냅니다.

0

모델이 복잡합니다 (다른 모델도 포함).

사실은 없지만 MVC의 Json 함수는 복잡한 모델을 JQuery 파트에 전달하는 데 문제가있는 것으로 보입니다. mvc 액션 (Json이있는 행의 F9)에서 결과를 검사하면 Json이 복잡한 모델을 base, Model1, Mode2 등으로 매핑하는 것을 볼 수 있습니다.

Json은 매핑 된 결과를 반환하지만 임상 진부 jQuery 파트는이를 이해할 수 없으며 오류는 발생하지 않지만 클라이언트에서는 데이터를 사용할 수 없습니다.

나는 솔루션을 찾으려고 노력했지만 아직 해결책을 찾지 못했습니다. 나는 당신 (. post, .get, .ajax ... JsonResult, etc. 등)과 같은 여러 조합을 시도했다. 내 모델 OrderDetail은 내부에 두 개의 다른 모델을 가지고,이 경우

[HttpPost] 
     public ActionResult GetOrderDetail(int id) 
     { 
      var orderDetail = orderService.GetOrderDetail(id); 

      var result = Json(new 
      { 
       ItemDescription = orderDetail.ItemDescription, 
       ItemUrl = orderDetail.ItemUrl 
      }); 

      return result; 
     } 

: 주문, OrderMessages과 같은 문제가 Unfortunatelly, 유일한 방법은 (동작에서)이 같은 수동으로 만든 JSON 결과를 반환 작동하는 것 같다 당신이 묘사하는대로. 여기에 표시된 것처럼 수동으로 속성을 속성에 매핑하면 작동합니다.

관련 문제