首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.net mvc前台如何接收和解析后台的字典类型的数据

.net mvc前台如何接收和解析后台的字典类型的数据

作者头像
CherishTheYouth
发布于 2019-07-30 07:31:54
发布于 2019-07-30 07:31:54
1.3K00
代码可运行
举报
文章被收录于专栏:Vue技术实践Vue技术实践
运行总次数:0
代码可运行

  很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是没有找到。

  今天想记录一下这样一个小的需求的做法。先说一下我的想法:因为是一个门户网站,所以我需要从后台传大量的数据到前台,我考虑的是这样做,用一个字典类型(dictionary<,>)的变量,把数据的类型(比如新闻,公司产品,技术特点,公司简介)等等作为字典的键值,而把相关的数据放到一个List<T>集合里,然后把集合的内容作为键值对应的value,想这样传递到前台来。这样的一个字典数据就比较的复杂了,我后台都做好了,前端也能接收到数据,但不知道怎么把这些数据一一拿出来,在网上查了很多资料,但问题没有解决,后来知道公司的一个前辈曾把一个字典数据通过web api传递给app端,借鉴了一下他的方法,最终达到了我的目的。

  事先声明,本篇博客我只会把关键代码贴上,而不会写一个完整的demo,因为那样会增加很多不必要的内容。

首先把后台的代码贴出来看看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        [HttpPost]
        public ActionResult GetData()
        {
            try
            {
                //声明一个字典变量
                Dictionary<string,List<object>> dictionary = new Dictionary<string,List<object>>();
                //获取轮播图图片类型id
                var ImageType = context.DicItems.FirstOrDefault(x => x.Name == "主页轮播图").Id;         
                var BanImage = context.ManageImages.Where(m => m.ParentId == ImageType && m.IsDelete == false).OrderByDescending(m => m.UploadTime).ToList();
                var BanImageData = BanImage.Select(x => new
                {
                    x.Id,
                    x.ImageTitle,
                    x.ImageUrl
                }).ToList().Cast<object>().ToList();
                //将轮播图信息添加到字典中
                dictionary.Add("BanImage", BanImageData);
                //技术特色
                var technology = context.Technologies.Where(x => x.IsDelete == false).OrderByDescending(x => x.CreateTime);
                var TechnologyData = technology.Select(x => new
                {
                    x.Id,
                    x.TechName,
                    x.CoverImage
                }).ToList().Cast<object>().ToList();
                dictionary.Add("Technology", TechnologyData);
                return Json(new {
                    Data = dictionary,
                    Result = true
                });

            }
            catch (Exception exception)
            {
                return Json(new
                {
                    Result = false,
                    exception.Message
                });
            }
        }

本段代码,我首先声明了一个字段类型的变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Dictionary<string,List<object>> dictionary = new Dictionary<string,List<object>>();

 然后用ef操作数据库获取了一些数据,并将数据存到List<T>集合中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var technology = context.Technologies.Where(x => x.IsDelete == false).OrderByDescending(x => x.CreateTime);//context是声明的上下文,代码中未贴出
 var TechnologyData = technology.Select(x => new
 {
     x.Id,
     x.TechName,
     x.CoverImage
 }).ToList().Cast<object>().ToList();

第三步,把数据添加到字典中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dictionary.Add("Technology", TechnologyData);

前面是键(key),后面是值(value),有关字典类型不清楚的可百度,此处不做说明。

以json格式像前台回传数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 return Json(new {
     Data = dictionary,
     Result = true
 });

传过去的数据应该为如下一种格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "key1"[
        {"Id":"xxxxxx","name":"xxxxxx",.....},
        {"Id":"xxxxxx","name":"xxxxxx",.....},
        {"Id":"xxxxxx","name":"xxxxxx",.....},
        {"Id":"xxxxxx","name":"xxxxxx",.....}
    ],
    "key2"[
        {"Id":"xxxxxx","name":"xxxxxx",.....},
        {"Id":"xxxxxx","name":"xxxxxx",.....},
        {"Id":"xxxxxx","name":"xxxxxx",.....},
        {"Id":"xxxxxx","name":"xxxxxx",.....}
    ],
    .....
}

每个key下面的值可用下标获取,像这样:key1[2].name,key2[1].Id.

哈哈,这其实就是json格式,我太外行了,所以折腾很久也不知道怎么弄。

好了,现在说一下前台接收数据:

先贴出代码看看:<script type="text/javascript">

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

      $(document).ready(function(){
          query();
      });
    
    

在ajax里面,首先向后台发送数据请求,然后程序才运行到之前的后台代码,当后台把

这个数据回传到前台来的时候,由

这个data接收,这个data就包含两个值,一个交Result ,另一个交Data,但是这个data.Data数据真的有点复杂,不是像data.Result那样是个单数据,就是这里卡主我了。

后来是这样来做的:主要看下面这段代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    var getData = function (data) {
        var source = {};
        for (var item in data) {
           //item即为键值
            //source[item]为一个键值对应的list集合的值
            source[item] = data[item];   
        }
        return source;
    }

这个函数在上面运行起来就是这样的:getData(data.Data);

{}是js中的对象类型,

for(var item in data) 就把字典里的每一组数据遍历一遍,然后把对应的键值和数据保存到source{}对象中。然后就是常规操作读取数据了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 allData = getData(data.Data);
 var BanImageData = allData["BanImage"];
 for (var i = 0; i <= 3; i++) {
     var ImageId = "BanImage_" + i;
     alert(BanImageData[i].ImageUrl);
     $("#" + ImageId).attr("src", BanImageData[i].ImageUrl);
 }

allData拿到数据后,每个键值对应的数据就可以这样通过键值获取了

,获取后,具体是哪一组数据,再用下标获取就可以了。

,绕来绕去还是蛮麻烦的哈,但主要是数据比较复杂。

好了,就记录到这里啦,马上是元旦了,祝大家开心跨年咯!

本人菜鸟一个,要是有啥出错的,望指出哦,觉得我写的差的,接受轻轻的喷,恶意嘲讽谩骂者快走不送哦。

我的邮箱:3074596466@qq.com,欢迎指教!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何在Linux环境下进行STM32开发?
STM32CubeIDE 是 ST 官方提供的跨平台 IDE,支持 Linux,可以直接安装。
不脱发的程序猿
2025/02/18
4580
如何在Linux环境下进行STM32开发?
STM32F103C8T6单片机简介「建议收藏」
STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。除了被我们熟知的STM32,ST公司还有SPC5X系列、STM8系列等,具体参数如下:
全栈程序员站长
2022/08/10
14.9K0
STM32F103C8T6单片机简介「建议收藏」
【STM32】STM32单片机入门
这是一个新的系列,stm32单片机系列,资料都是从网上找的,主要参考江协科技还有正点原子以及csdn博客等资料,以一个一点没有接触过单片机但有一点编程基础的小白视角开始stm32单片机的学习,希望能对也没有学过51直接学32的同学们有一定的作用和帮助 文章内容有很多是自己的理解,希望各位嵌入式大佬们可以看一下文章然后帮忙指正一下错误,感谢!
s-little-monster
2024/08/09
4770
【STM32】STM32单片机入门
STM32F0单片机快速入门二 开发环境的建立 20200128
让 STM32F030 运行起来非常简单,在硬件上仅需给数字电源和模拟电源引脚(VDD,VDDA)供电,最好分别加上去耦电容。推荐值: VDD引脚加 1个4.7uF并联几个0.1uF 电容,VDDA 引脚加 1个1uF并联 1个0.01uF电容。电容值大些小些,甚至不加,对调试都不会有太大影响。
用户2366192
2021/05/31
8500
STM32MP157D-DK1 STM32CubeID使用与M核开发
STM32MP157具有A7内核核M4内核,前面介绍的一些文章,都是在A7内核上进行的,本篇来介绍M4内核的开发,以及开发时要用到的STM32 CubeIDE软件的使用。
xxpcb
2024/01/10
4140
STM32MP157D-DK1 STM32CubeID使用与M核开发
USB接口一键下载程序电路解析
一种是基于JTAG(SWD)的程序下载方式,这种方式需要仿真器才能高效与快捷地调试STM32单片机系统,例如,J-LINK与U-LINK等均是很好的仿真器,这种方式的好处是能够在线调试,直接用源代码下载。
用户10191012
2022/11/18
2.7K0
USB接口一键下载程序电路解析
STM32F103C8T6芯片的重要引脚功能有哪些?
STM32F103C8T6 是 STM32F1 系列中的一款基于 ARM Cortex-M3 内核的微控制器,具有丰富的外设和引脚功能。
不脱发的程序猿
2024/11/28
1.6K0
STM32F103C8T6芯片的重要引脚功能有哪些?
STM32F103笔记(一)[通俗易懂]
stm32F1系列是来自ARM公司具有突破性的以ARM Cortex-M3为内核的32为微处理器,内核为ARM公司为要求高性能,低功耗,低成本,性价比高的嵌入式应用专门设计的Cortex-M内核。
全栈程序员站长
2022/11/07
3.4K0
STM32F103笔记(一)[通俗易懂]
STM32低功耗控制心得体会
本文主要叙述在stm32进入stop时如何保持最低功耗的问题,并对部分细节问题进行分析整理。STM32L提供5种低功耗模式:低功耗运行模式、睡眠模式、低功耗睡眠模式、停止模式、待机模式。
bigmagic
2020/03/17
2.1K0
STM32低功耗模式笔记
1、所有IO管脚,如果高阻状态端口是高电平,就设成上拉输入;如果高阻状态是低电平,设成下拉输入;如果高阻是中间状态,设成模拟输入。这个很多人都提到过,必须的。作为输出口就免了,待机你想输出个什么东西,一定要输,硬件上加上下拉就可以了
小锋学长生活大爆炸
2020/08/13
2.3K0
STM32低功耗模式笔记
STM32中的BOOT0和BOOT1
所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。
用户9736681
2022/05/11
5.1K0
STM32中的BOOT0和BOOT1
史上最全面的JTAG和SWD接口的定义/STM32/STM8工程师的福音/JTAG转SWD接口仿真/告别杂乱的仿真线/终于讲清楚了JTAG/SWD
作为一名嵌入式工程师,相信大家都十分清楚MCU开发或者ARM开发都避免不了关键的研发过程,产品研发过程中的程序调试更是举足轻重般的存在。
全栈程序员站长
2022/08/10
18K0
史上最全面的JTAG和SWD接口的定义/STM32/STM8工程师的福音/JTAG转SWD接口仿真/告别杂乱的仿真线/终于讲清楚了JTAG/SWD
stm32 boot0硬件接法导致的概率性启动失败问题总结和反思
问题概要,板子在稳压电源上工作很好,可一旦接了电池,stm32就会出现概率性的无法启动。加上项目比较急,这个问题阻塞一直无法量产。真是非常的要命啊。
番茄老夫子
2023/11/03
1K0
单片机ISP、ICP和IAP编程方式,你知道吗?
前段时间有朋友在群里聊到单片机烧录程序什么情况要切换BOOT0、BOOT1?自己设计板子,不知道如何选择。
不脱发的程序猿
2025/07/04
2270
单片机ISP、ICP和IAP编程方式,你知道吗?
STM32 最小系统
单片机最小系统是指用最少的电路组成单片机可以工作的系统,通常最小系统包含:电源电路、时钟电路、复位电路、调试/下载电路,对于STM32还需要启动选择电路。
韦东山
2022/05/05
1.7K0
STM32 最小系统
如何使用串口来给STM32下载程序
第一次学习STM32的时候,不知道有调试器这个东西,所以一直是通过串口来给STM32下载程序,下载速度也还算可以,一般是几秒钟完成。后来用了调试器,可以直接在Keil环境下进行下载,而且还可以进行在线调试,所以后来就很少使用串口来下载程序了。前几天在uFUN试用群里看到有几个朋友在使用串口下载程序时,遇到了各种各样的问题,所以在这里简单介绍一下如何通过串口来给STM32下载程序。
单片机点灯小能手
2020/07/16
3.3K0
stm32实用技巧:JLINK接口定义和使用JTAG或SW下载程序「建议收藏」
stm32下载程序,实用JLink的JTAG下载座,分为实现JTAG的下载和SW的下载
全栈程序员站长
2022/09/01
8.1K0
STM32介绍
什么是 STM32 STM32,从字面上来理解,ST 是意法半导体,M 是Microelectronics 的缩写,32 表示32 位,合起来理解,STM32 就是指 ST 公司开发的 32 位微控制器。STM32 是以32位为一个单位,同时能处理32位。比如51单片机就是一个同时处理8位的单片机。STM32中外设以4个位确定一个引脚功能。在如今的 32 位控制器当中,STM32 可以说是最璀璨的新星,大受工程师和市场的青睐,无芯能出其右。 CMSIS构架
跋扈洋
2021/01/29
2.6K1
【STM32】硬件资源及芯片介绍
以精英板STM32F103为例。STM32是Cortex M3架构,拥有更强劲的性能、更高的代码密度、位带操作、可嵌套中断、低成 本、低功耗等众多优势。
DevFrank
2024/07/24
3310
1-HC32F460(华大)+BC260Y(NB-IOT)基本控制篇(自建物联网平台)--硬件使用说明
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLIOTA_BC260Y/my.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
杨奉武
2021/06/01
2.7K0
1-HC32F460(华大)+BC260Y(NB-IOT)基本控制篇(自建物联网平台)--硬件使用说明
推荐阅读
相关推荐
如何在Linux环境下进行STM32开发?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验