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

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

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

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

        [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
});
}
}

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

 Dictionary<string,List<object>> dictionary = new Dictionary<string,List<object>>();

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

 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();

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

dictionary.Add("Technology", TechnologyData);

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

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

 return Json(new {
Data = dictionary,
Result = true
});

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

{
"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">


  $(document).ready(function(){
  query();
  });
    
    
     var allData = {};
        var query = function () {
$.ajax({
type: 'post',
url: "@Url.Action("GetData","Home")",
dataType: 'json',
success: function (data) {
// alert(data.Message);
if (data.Result) {
allData = getData(data.Data);
var BanImageData = allData["BanImage"];
for (var i = ; i <= ; i++) {
var ImageId = "BanImage_" + i;
alert(BanImageData[i].ImageUrl);
$("#" + ImageId).attr("src", BanImageData[i].ImageUrl);
}
}
}
});
} var getData = function (data) {
var source = {};
for (var item in data) {
//item即为键值
//source[item]为一个键值对应的list集合的值
source[item] = data[item];
}
return source;
}

在ajax里面,首先向后台发送数据请求,然后程序才运行到之前的后台代码,当后台把这个数据回传到前台来的时候,由这个data接收,这个data就包含两个值,一个交Result ,另一个交Data,但是这个data.Data数据真的有点复杂,不是像data.Result那样是个单数据,就是这里卡主我了。

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

    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{}对象中。然后就是常规操作读取数据了。

 allData = getData(data.Data);
var BanImageData = allData["BanImage"];
for (var i = ; i <= ; i++) {
var ImageId = "BanImage_" + i;
alert(BanImageData[i].ImageUrl);
$("#" + ImageId).attr("src", BanImageData[i].ImageUrl);
}

allData拿到数据后,每个键值对应的数据就可以这样通过键值获取了,获取后,具体是哪一组数据,再用下标获取就可以了。

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

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

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

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

.net mvc前台如何接收和解析后台的字典类型的数据的更多相关文章

  1. .net mvc前台如何接收和解析后台的字典类型的数据 二分搜索算法 window.onunload中使用HTTP请求 网页关闭 OpenCvSharp尝试 简单爬虫

    .net mvc前台如何接收和解析后台的字典类型的数据   很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是 ...

  2. .net Mvc Controller 接收 Json/post方式 数组 字典 类型 复杂对象

    原文地址:http://www.cnblogs.com/fannyatg/archive/2012/04/16/2451611.html ------------------------------- ...

  3. HttpServletResponse工具类和HttpServletRequest工具类,前台参数接收方式和后台返回(JSON)数据格式

    RequestUtils.java 操作类 package cn.utils; import org.apache.commons.lang3.StringUtils; import org.slf4 ...

  4. JS前端取得并解析后台服务器返回的JSON数据的方法

    摘要:主要介绍:使用eval函数解析JSON数据:$.getJSON()方法获得服务器返回的JSON数据 JavaScript eval() 函数 eval(string) 函数可计算某个字符串,并执 ...

  5. 前台js接收后台的json数据

    后台返回的json数据,如php的: return json_encode($data); 在前台 js接收如下: function json2object(str){ var jsstr = str ...

  6. 前台JSON字符串,spring mvc controller也接收字符串

    前台JSON字符串,spring mvc controller也接收字符串 前台: $.post(url, { data : JSON.stringify(obj) }, function(data) ...

  7. 将前台json对象传入java后台

    前台json格式的数据如何传入后台 1. 将要传入后台的数据组装成JSON格式的字符串: var jsonStr = [{'name':'jim' , 'age':20} , {'name':'kin ...

  8. JS前台base32加密,C#后台解码

    公司的系统应用后,客户那边用appscan工具检测到严重的漏洞 1.使用 SQL 注入的认证旁路 (1/2)--未对用户输入正确执行危险字符清理 2.已解密的登录请求 (2/2)----诸如用户名.密 ...

  9. Ajax接收并显示后台传来的list集合内的数据信息

    最近在学习Ajax做一个留言系统的时候碰到需要将list集合从后台传到前台ajax接收并显示的情况,在网上搜了很多,但很多情况都不是和我遇见的情况一样的,现在,直接贴出我的问题及解决方法. 后台代码: ...

随机推荐

  1. pandas用法小结

    前言 个人感觉网上对pandas的总结感觉不够详尽细致,在这里我对pandas做个相对细致的小结吧,在数据分析与人工智能方面会有所涉及到的东西在这里都说说吧,也是对自己学习的一种小结! pandas用 ...

  2. nginx与Apache的对比以及优缺点

    本文来自其他文章.如有好的问题,希望各位大神多多分享, 谢谢了..... 今天准备较详细的对比一下apache httpd与nginx两个web服务器的异同点.优缺点.由于我并不是做web开发的,所以 ...

  3. SpringBoot拦截器中Bean无法注入(转)

    问题 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Be ...

  4. 【原】fetch跨域请求附带cookie(credentials)

    HTTP访问控制 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS 解决跨域的方式有很多种,本文介绍" ...

  5. Kali Linux远程连接Windows服务器

    前言: 为了在Kali上远程连接Windows系统的服务器我们需要安装两个工具,rdesktop和tsclient.另外,我们从主机服务商那里购买的Windows操作系统的服务器都是默认开启了远程连接 ...

  6. tkinter中scale拖拉改变值控件(十一)

    scale拖拉改变值控件 使用户通过拖拽改变值 简单的实现: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya. ...

  7. 在线OJ的小demo

    牛课网OJ规则 用readLine()代替read_line() 用readLine()代替read_line() 用readLine()代替read_line() 用readLine()代替read ...

  8. centos环境的python、scrapy部署

    1 操作系统 Centos 6.5 64bit 或以上版本 2 软件环境 提示:(1)用什么软件:(2)运行环境(3)开发包. Python:Python-2.7.6.tgz Scrapy:Scrap ...

  9. [爬虫]Windows下如何安装python第三方库lxml

    lxml是个非常有用的python库,它可以灵活高效地解析xml与BeautifulSoup.requests结合,是编写爬虫的标准姿势. 但是,当lxml遇上Windows,简直是个巨坑.掉在安装陷 ...

  10. GitHub 系列之「Git速成」

    1.什么是Git? Git 是 Linux 发明者 Linus 开发的一款新时代的版本控制系统,那什么是版本控制系统呢?怎么理解?网上一大堆详细的介绍,但是大多枯燥乏味,对于新手也很难理解,这里我只举 ...