Выполнить итерацию по словарю C #, используя возвращаемое значение jquery Json

#c# #jquery #json #asp.net-mvc

#c# #jquery #json #asp.net-mvc

Вопрос:

У меня есть словарь, который содержит, ну, строки: Ключ: «X» Значение: «Y», например, это возвращается через JsonResult в моем контроллере:

  public JsonResult GetMachineSettings(string machine)
    {
        DataTable _dt = getmysettings_SqlCall;

        TaskSetting _mr= new TaskSetting(); //simply a dictionary of string,string
        foreach (DataRow _row in _dt.Rows)
        {
            _mr.Settings.Add( _row.Field<string>("SettingKey"), 
            _row.Field<string>("SettingValue"));
        }

        return Json(_mr);
    }
  

Это было вызвано и возвращено с помощью вызова jquery Ajax:

 <script type="text/javascript">
$('#machines').change(function () {
   $(this).parents('form').submit();
    $.ajax({
        type: 'POST',
        url: '@Url.Action("GetMachineSettings")', // we are calling json method

        dataType: 'json',

        data: {
            _items: $("#machines").val() },
        success: function(_items) {

            var a=JSON.parse(_items);

            $.each(a.Record, function (i, record) {
                    alert(record.key   " "   record.value);
            });
        },
        error: function(ex) {
            alert('Failed to retrieve Tasks.'   ex);
        }
    });
    return false;
});
  

но это не удается, и публикуется строка со всеми моими данными в формате Json из-за исключения нулевой ссылки в цикле foreach:

{«Настройки»:{«X»:»Y»}}

Что я пытаюсь сделать, так это показать простое оповещение (на данном этапе), которое будет отображать пару ключ / значение (и, что еще лучше, оповещение для каждого ключа, затем значение). Но я не уверен, как это можно выполнить.

Комментарии:

1. Можем ли мы видеть исходные данные, возвращающиеся с сервера? Добавьте строку console.log(_items); в качестве первой строки вашего success обработчика…

2. это даже не попадает в обработчик успеха. Он просто завершается ошибкой и выводит приведенный мной пример…

3. Не уверен, что здесь getmysettings_SqlCall.

Ответ №1:

Я попытался воспроизвести ваш код, измените вызов AJAX на это

Удалить var a=JSON.parse(_items); , поскольку _items уже является объектом JSON

Измените способ доступа (ключ, запись) в each методе.

И обратите внимание, что ваше свойство находится Settings в TaskSetting not Record .

  $.ajax({
        type: 'POST',
        url: '@Url.Action("GetMachineSettings")', // we are calling json method

        dataType: 'json',

        data: {
            _items: $("#machines").val()
        },
        success: function (_items) {
            //var a = JSON.parse(_items);
            $.each(_items.Settings, function (key, record) {
                console.log(key   " "   record);
            });
        },
        error: function (ex) {
            alert('Failed to retrieve Tasks.'   ex);
        }
    });