使用jquery Json返回值遍历C#字典

时间:2019-04-22 20:26:11

标签: 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;
});

但是它失败了,并且由于在foreach循环上除了online以外的空引用而以Json格式发布了一个包含我所有数据的字符串:

  

{“设置”:{“ X”:“ Y”}}

我想做的是显示一个简单的警报(此时),该警报将显示键/值对(甚至更好的是,每个键然后一个值的警报)。但是我不确定如何实现。

1 个答案:

答案 0 :(得分:1)

我试图重现您的代码,将AJAX调用更改为此

删除var a=JSON.parse(_items);,因为_items已经是JSON对象

更改each中访问(键,记录)的方式 方法。

请注意,您的财产在Settings中是TaskSetting,而不是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);
        }
    });