Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于java与springboot结合商品推荐算法实现商品推荐网站+商品管理系统后台,mysql,vue
面对海量的商品信息如何实现针对不同用户维度开展个性化商品推荐,实现用户线上选购商品,下订单,支付,物流配送等?本次毕设程序基于前后端分离开发模式,搭建系统网络商品推荐系统前台与系统后台商品管理系统,通过可以配置的方式一体化管理商品信息,推送商品内容,生成丰富的可视化统计分析。
计算机程序优异哥
2022/12/02
1.5K0
C# 数据操作系列 - 19 FreeSql 入坑介绍
简单介绍一下,FreeSql 是NCC组织的沙盒级项目,是一款功能强大的 ORM 组件,支持 .NET Core、.NET Framework 和 Xamarin。目前 FreeSql 支持以下数据库:MySQL、PostgreSQL、SqlServer、Oracle、Sqlite、Odbc、微软 Access 以及国产数据库达梦。
程序员小高
2020/06/03
2.5K0
给自己看的Cache,三段代码
此篇是我记录代码的一个草稿,不是一篇正式的博文,误点的别介意啊。 公司的框架中Cache实现文件: (1)CacheUtil.cs using System.Collections.Generic; using System.Linq; using Modules; using ORM; namespace Console { public static class CacheUtil { private const string LoginUserKey = "Cache
CherishTheYouth
2019/07/30
4220
一个可用于生产项目 基于 .NET 6 自研ORM
Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer Oracle MySql PostgreSql Sqlite
郑子铭
2023/08/29
3390
一个可用于生产项目 基于 .NET 6 自研ORM
VS2010+EF Code First 4.1学习MVC3(一)
这里的环境只有VS2010,EF CF4.1,继续加入Jquery EasyUI,做一个用户列表(选中,编辑,删除,新增)
Isaac Zhang
2019/09/10
5440
VS2010+EF Code First 4.1学习MVC3(一)
.Net Core配置Configuration源码研究
最近又研究了一下.NetCore配置选项的源码实现,又学习到了不少东西。这篇文章先写一下IConfiguration的学习成果,Options的后面补上
蓝夏
2021/09/09
6780
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 EasyUI Datagrid在加载的时候会提交一些分页的信息到后台,我们需要根据这些信息来进行数据分页再次返回到前台 实现 首先要让DataGrid支持分页,我们需要在JS Datagrid中加入下列几个属性 是否启用分页:pagination 默认是false 每页数量:pageSize 默认10 可选择每页数量:pageList 默认[10,20,30,40,50] 排序字段:sortName 默认null 排序类型:sortO
用户1149182
2018/01/16
1.3K0
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
.Net将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),并使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA
   前段时间因为项目进度比较繁重所以一直都没有时间更新博客,内心深深的负重感,没有履行年初立下的flag。不过这个月会把上个月没有完成的任务补上来,咱们可不是喜欢拖欠任务的攻城狮。哈哈,废话不多说,接下来是要总结下关于对接支付时我们经常会遇到的将对应集合中的参数按照ASCII码按照从小到大排序,并使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA,其实对于有些参数比较少的而已我们完全可以自己使用固定拼接的方式拼接好来,但是假如参数集合中的参数多达十几个呢?你还是愿意用死方法一个一个的拼接吗?当然我是不愿意的,下面是我在网上的找的一个关于参数ASCII按从小到大排序的例子并结合自己的需求而总结的一个比较好的方法,已经在项目中使用了(老实说.Net对接美团支付真的是心累,庆幸的是现在已经无缝对接完成了)!
追逐时光者
2019/08/28
1.5K0
.net mvc中一种简单的工作流的设计
开篇前的废话:工作流是我们在做互联网应用开发时经常需要用到的一种技术,复杂的工作流我们基本是借助一些开源的 工作流项目来做,比如 ccflow等,但是有时候,我们只需要实现一些简单的工作流流程,这时候用 ccflow等就显得杀鸡用牛刀了,这时候我们就得自己写一个简单的工作流的流程了,一个简单的工作流的实现,如果没有自己动手做过,单凭看别人的博客是很难理解的,我就曾在这个问题上掉进大坑。下面把我对简单工作流的实现简单的记录一下。
CherishTheYouth
2019/07/30
5160
.net mvc中一种简单的工作流的设计
python入门到放弃(七)-基本数据类型之dcit字典
1.概述 字典是python中唯一的一个映射类型,以{}大括号括起来的键值对组成 字典中的key是唯一的,必须是可hash,不可变的数据类型 语法:{key1:value,key2:value} #扩展: 可哈希(不可变)的数据类型:int,str,tuple,bool 不可哈希(可变)的数据类型:list,dict,set #先来看看dict字典的源码写了什么,方法:按ctrl+鼠标左键点dict class dict(object): """ dict() -> new empty
老油条IT记
2020/03/20
6270
Springboot+Java推荐算法+商品推荐系统+商品管理系统
面对海量的商品信息如何实现针对不同用户维度开展个性化商品推荐,实现用户线上选购商品,下订单,支付,物流配送等?本次毕设程序基于前后端分离开发模式,搭建系统网络商品推荐系统前台与系统后台商品管理系统,通过可以配置的方式一体化管理商品信息,推送商品内容,生成丰富的可视化统计分析。
计算机程序优异哥
2022/05/20
11K0
迁移 appseting.json 创建自定义配置中心
创建一个自定义的配置中心,将框架中各类配置,迁移至数据库,支持切换数据库,热重载。
郑子铭
2021/11/10
1.3K0
迁移 appseting.json 创建自定义配置中心
List,DataTable实现行转列的通用方案
本文通过行转列引出System.Linq.Dynamic,并介绍了过滤功能,其实它的用处还有很多,等待大家发掘。
用户1168362
2018/01/05
2.1K0
List,DataTable实现行转列的通用方案
.NET实现之(简易ORM)
ORM模型在现在的项目开发中用的还是比较多的,他的好坏我们就不讨论了,已学习为主吧;
王清培
2022/03/14
7490
.NET实现之(简易ORM)
.net mvc + layui做图片上传(一)
  图片上传和展示是互联网应用中比较常见的一个功能,最近做的一个门户网站项目就有多个需要上传图片的功能模块。关于这部分内容,本来功能不复杂,但后面做起来却还是出现了一些波折。因为缺乏经验,对几种图片上传的方法以及使用范围和优缺点都不太了解,导致在做相关功能时也确实走了一些弯路。
CherishTheYouth
2019/07/30
1.6K0
.net mvc + layui做图片上传(一)
easyui combobox下拉框实现多选框以及全选、全不选的实现
实现效果如下图: 当勾选全选的时候,可以选中下列所有的选项,当取消勾选时可取消所有勾选。 废话不多说 贴代码吧: 前端代码: //这里的id是上面的combobox的id,因为我要在点击一个按钮的之后
故久
2019/09/29
6.7K0
easyui combobox下拉框实现多选框以及全选、全不选的实现
自定义Key类型的字典无法序列化的N种解决方案
当我们使用System.Text.Json.JsonSerializer对一个字典对象进行序列化的时候,默认情况下字典的Key不能是一个自定义的类型,本文介绍几种解决方案。
蒋金楠
2024/03/20
2980
自定义Key类型的字典无法序列化的N种解决方案
通过实例模拟ASP.NET MVC的Model绑定的机制:集合+字典
在本系列的前面两篇文章(《简单类型+复杂类型》、《数组》)我们通过创建的实例程序模拟了ASP.NET MVC默认使用的DefaultModelBinder对简单类型、复杂类型以及数组对象的Model绑
蒋金楠
2018/01/15
1.9K0
ASP.NET MVC (二、数据传递)
ASP.NET MVC是最简洁、最方便、最高效、最快速的小型网站开发的方法,本文可以让一个小白用最快速的方式学会网站开发。
红目香薰
2022/11/29
1.2K0
ASP.NET MVC (二、数据传递)
【六】Python基础之数据结构:字典
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,字典是另 一种可变容器模型,且可存储任意类型对象。具有极快的查找速度。
菲宇
2019/06/13
5260
推荐阅读
相关推荐
基于java与springboot结合商品推荐算法实现商品推荐网站+商品管理系统后台,mysql,vue
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验