2014-02-26 33 views
2

我有一個JavaScript方法,使控制器方法的AJAX調用。 這個控制器方法是一個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"} 

正如你所看到的,這並不代表javascript Array,所以沒有數量,大小或長度。這只是一個具有屬性的普通JavaScript對象。

這裏是你如何能在你的AJAX成功回調使用的值:

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

假設你返回Dictionary<string, SomeModel>你可以明顯地訪問在你的JavaScript變量的值,這個模型的屬性:value.SomeProperty

+0

其Dictioanry 但我認爲這是沒有什麼不同,從字符串,字符串類型。所以讓我試試這個。 – Abhid

+0

這工作。謝謝。 :) – Abhid