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

Posted

技术标签:

【中文标题】使用 jquery Json 返回值遍历 C# 字典【英文标题】:Iterate over A C# dictionary using a jquery Json return value 【发布时间】:2019-09-12 00:24:15 【问题描述】:

我有一本包含字符串的字典: 键:“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"

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

【问题讨论】:

我们能看到从服务器返回的原始数据吗?将console.log(_items); 行添加为success 处理程序的第一行... 它甚至没有命中成功处理程序。它只是失败并输出我给出的示例...... 不确定这里的 getmysettings_SqlCall 是什么。 【参考方案1】:

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

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

each 中更改访问(密钥、记录)的方式 方法。

请注意,您的属性是 Settings in 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);
        
    );

【讨论】:

以上是关于使用 jquery Json 返回值遍历 C# 字典的主要内容,如果未能解决你的问题,请参考以下文章

Jquery如何遍历JSON数组并不断添加值

jQuery的POST请求返回JSON返回集合遍历方法

JQuery Javascript 函数以 JSON 格式返回 highchart 图形数据源,并通过 Selenium 和 C# 正确格式化

jQuery中使用$.each()遍历后台响应的json字符串问题

jquery如何遍历dom对象

jquery each如何遍历出这样的json到页面