2011-09-26 2 views
1

그래서 내 페이지에서 $ .ajax 호출에서 컨트롤러의 GetServerUpdateProgress()를 실행하고 있습니다. 디버깅하는 동안 myobj가 제대로 작성되고 올바른 데이터로 채워지는지 확인할 수 있습니다.Javascript Deserialize가 실제 객체 대신 클래스 이름을 반환합니다.

$ .ajax 성공시 데이터가 json 형식이 아닌 대신 문자열 ("TrackerMVC.ClassLib.UpdateAJAXProgress"- 개체 유형)이 나타납니다.

.svc webservice를 사용하여 과거에이 작업을 수행했지만 똑같은 방법으로 객체 값을 가져 오는 데 아무런 문제가 없었습니다.

아이디어가 있으십니까? 감사!

방법 :

public UpdateAJAXProgress GetServerUpdateProgress() 
{ 
     string BASE_URL = "http://localhost:55094"; 
     string url = BASE_URL + "/Home/UpdateProgress"; 
     WebRequest wr = WebRequest.Create(url); 
     wr.Credentials = CredentialCache.DefaultNetworkCredentials; // uses current windows user 

     var myojb = new UpdateAJAXProgress(); 
     var response = (HttpWebResponse)wr.GetResponse(); 
     var reader = new StreamReader(response.GetResponseStream()); 
     JavaScriptSerializer js = new JavaScriptSerializer(); 
     var objText = reader.ReadToEnd(); 
     myojb = (UpdateAJAXProgress)js.Deserialize(objText, typeof(UpdateAJAXProgress)); 
     return myojb; // during debugging this object has the correct values in the correct format 
} 

클래스 :

public class UpdateAJAXProgress 
{ 
    public int Completed { get; set; } 
    public int Total { get; set; } 
} 

자바 스크립트 : 당신은 MVC를 오용하고

$.ajax({ 
     type: "POST", 
     async: false, 
     url: '@(Url.Action("GetServerUpdateProgress","Charts"))', 
     contentType: "application/json; charset=utf-8", 
     success: function (data) { 
      console.log(data); // data being returned is: "TrackerMVC.ClassLib.UpdateAJAXProgress" 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert(XMLHttpRequest.status); 
      alert(XMLHttpRequest.responseText); 
     } 
}); 

답변

2

.

ActionResult 다음에 return Json(myobj)을 반환하는 것으로 함수를 선언해야합니다.

MVC 작업에서 ActionResult이 아닌 값을 반환하면 MVC는 ToString()을 호출하여이 값을 문자열로 변환합니다.

+0

고마워요! 나는 아직도 배우고 있지만 당황 스럽다 나는 완전히 깨닫지 못했다^_ ^ – Robodude

관련 문제