2014-02-26 1 views
2

컨트롤러 메서드에 AJAX 호출을 수행하는 JavaScript 메서드가 있습니다. 이 컨트롤러 메서드는 JsonResult 메서드로, 사전 객체를 다시 JavaScript로 반환합니다. 하지만이 객체 (예 : dictionaryObject.count, dictionaryObejct [i] .value 등)에 대한 모든 작업을 수행하면 "정의되지 않음"이 표시됩니다. 내가 어떻게이 객체를 사용해야하는지에 대한 어떤 생각?JsonResult 메서드에서 반환되는 사전을 트래버스하는 방법은 무엇입니까?

function MakeControllerMethodCallFunction(stringParam1, stringParam2) { 
    // Remove all rows from table so that table can have latest data 
    $('#TableModal tr').each(function (i, row) { 
     var $row = $(row); 

     $row.remove(); 
    }); 

    $("#TableModal thead").append("<tr><th>" + stringParam1+ " Details " + "</th></tr>"); 

    //Resolving the server side method URL 
    var websitePath = GetRootWebSitePath(); 
    var getUrl = websitePath + "/Home/GetDetails"; 

    //Creating parameters for Ajax call 
    var params = "{\"ParamOne\" : \"" + stringParam1+ "\" , \"ParamTwo\" : \"" + stringParam2+ "\" }"; 

    //AJAX Call 
    $.ajax({ 
     url: getUrl, 
     type: 'POST', 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8', 
     data: params, 
     success: MakeControllerMethodCallFunction_Success, 
     error: function (xhr, status, thrownError) { 
      alert("Get Details error"); 
     } 
    }); 
} 

//On Success of MakeControllerMethodCallFunction() this will be hit and values will be bind to the table 
function MakeControllerMethodCallFunction_Success(dictionaryObject) { 
    var Size = 0; 
    if (dictionaryObject!= null) { 

     Size = (dictionaryObject!= null) ? dictionaryObject.count : 0; 
    } 

    if (Size != null) { 

     for (var i = 0; i < Size; i++) { 

      var newRow = "<tr>"; 

      if (dictionaryObject!= null && dictionaryObject.count> 0 && dictionaryObject[i] != null) { 
       newRow += "<td>" + dictionaryObject[i].name + "</td>" + "<td>" + dictionaryObject[i].value + "</td>"; 

      } 
      else { 
       newRow += "<td></td>"; 
      } 
      newRow += "</tr>"; 
      $("#TableModal tbody").append(newRow); 
     } 
    } 
} 
+0

Chrome에서 F12를 누르십시오. (모두 Chrome을 사용하고 있습니까?) JS 개발에 도움이되는 다양한 도구가 제공됩니다. 브레이크 포인트를 치고 데이터의 모양을 검사하고 콘솔 평가판 및 오류 스타일의 표현식을 평가하십시오. –

+0

VS의 QuickWatch 창을 사용하고있었습니다. 어쨌든, 이제 끝났어. TY. :) – Abhid

답변

7

당신이 당신의 컨트롤러 액션에서 Dictionary<string, string>을 반환 한 가정 :

public ActionResult GetDetails() 
{ 
    var result = new Dictionary<string, string> 
    { 
     { "key1", "value1" }, 
     { "key2", "value2" }, 
     { "key3", "value3" }, 
    }; 

    return Json(result, JsonRequestBehavior.AllowGet); 
} 

다음 JSON 초래하는 것은 와이어를 통해 전송되는 :

{"key1":"value1","key2":"value2","key3":"value3"} 

당신이 볼 수 있듯이, 이것은 자바 스크립트 Array을 나타내지 않으므로 카운트, 크기 또는 길이는 없습니다. 그것은 단지 속성을 가진 일반적인 자바 스크립트 객체입니다.

그리고 여기 당신이 당신의 AJAX 성공 콜백의 값을 사용할 수있는 방법은 다음과 같습니다

function MakeControllerMethodCallFunction_Success(dictionaryObject) { 
    for (var key in dictionaryObject) { 
     if (dictionaryObject.hasOwnProperty(key)) { 
      var value = dictionaryObject[key]; 
      alert(key + " -> " + value); 
     } 
    } 
} 

당신이 Dictionary<string, SomeModel> 당신은 분명히 당신의 자바 스크립트의 값 변수에이 모델의 속성에 액세스 할 수 반환 가정 : value.SomeProperty.

+0

그 Dictioanry 하지만 나는 문자열, 문자열 유형과 다를 것이라고 생각합니다. 그래서 이것을 시험해 보도록하겠습니다. – Abhid

+0

이것은 작동합니다. 고맙습니다. :) – Abhid

관련 문제