.net mvc前臺如何接收和解析後臺的字典類型的數據

来源:https://www.cnblogs.com/CherishTheYouth/archive/2018/12/29/CherishTheYouth_1229.html
-Advertisement-
Play Games

很久沒有寫博客了,最近做了一個公司門戶網站的小項目,其中接觸到了一些我不會的知識點,今日事情少,便記錄一下,當時想在網上搜索相關的內容,但是沒有找到。 今天想記錄一下這樣一個小的需求的做法。先說一下我的想法:因為是一個門戶網站,所以我需要從後臺傳大量的數據到前臺,我考慮的是這樣做,用一個字典類型(d ...


  很久沒有寫博客了,最近做了一個公司門戶網站的小項目,其中接觸到了一些我不會的知識點,今日事情少,便記錄一下,當時想在網上搜索相關的內容,但是沒有找到。

  今天想記錄一下這樣一個小的需求的做法。先說一下我的想法:因為是一個門戶網站,所以我需要從後臺傳大量的數據到前臺,我考慮的是這樣做,用一個字典類型(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 = 0; i <= 3; 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 = 0; i <= 3; i++) {
     var ImageId = "BanImage_" + i;
     alert(BanImageData[i].ImageUrl);
     $("#" + ImageId).attr("src", BanImageData[i].ImageUrl);
 }

 

allData拿到數據後,每個鍵值對應的數據就可以這樣通過鍵值獲取了,獲取後,具體是哪一組數據,再用下標獲取就可以了。

,繞來繞去還是蠻麻煩的哈,但主要是數據比較複雜。

好了,就記錄到這裡啦,馬上是元旦了,祝大家開心跨年咯!

本人菜鳥一個,要是有啥出錯的,望指出哦,覺得我寫的差的,接受輕輕的噴,惡意嘲諷謾罵者快走不送哦。

 

我的郵箱:[email protected],歡迎指教!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題意 "題目鏈接" 有$n$張牌,每張牌有四個屬性$(a, b, c, d)$,主人公有兩個屬性$(x, y)$(初始時為(0, 0)) 一張牌能夠被使用當且僅當$a define Pair pair define MP(x, y) make_pair(x, y) define fi first d ...
  • 簡介 資料庫查詢構建器提供了一個方便的流介面用於創建和執行資料庫查詢。查詢構建器可以用於執行應用中絕大部分資料庫操作,並且能夠在 Laravel 支持的所有資料庫系統上工作。 註:流介面是一種設計模式,更多關於流介面模式的設計和使用方式,可查看這篇教程:PHP 設計模式系列 —— 流介面模式。 La ...
  • 使用DB查詢,必須use Illuminate\Support\Facades\DB; 多數組條件查詢單條數據 first() 解釋下哈,這裡是前臺模板提交ajax提交來的post方式數據,這裡我沒有用到Model層,也就是Model層邏輯在Controller里寫了,這也是可以的哈 查詢多條數據用 ...
  • 1.個人思路 1.情景假設 一天,班主任佈置了一個任務:給所有的小朋友都發了一個牌子,每個牌子上都有一個數字,誰找到兩個牌子合起來的數字等於老師的牌子,那麼可以贏的一個蘋果。 這個時候小朋友,如果你是小朋友。肯定先看自己牌子的數字,然後在看看老師牌子的數字,找數學老師算出需要的數字,然後去看看誰的牌 ...
  • 上兩節介紹完Hybrid模式在MVC下的使用,包括驗證從數據獲取的User和Claim對MVC的身份授權。本節將介紹Implicit模式在JavaScript應用程式中的使用,使用Node.js+Express構建JavaScript客戶端,實現前後端分離。本節授權服務和資源伺服器基於第四和第五節。 ...
  • 在上一篇博文《 "[UWP]在UWP平臺中使用Lottie動畫" 》中我簡單介紹了一下LottieUWP項目以及如何使用它呈現Lottie動畫,這篇文章里我們來講點進階的東西——緩存Lottie動畫幀。 為什麼會有這樣的需求呢? 有兩方面原因: 直接在XAML中使用Lottie動畫時,是邊播放邊渲染 ...
  • 最近QQ影音久違的更新了,因為記得QQ影音之前體驗還算不錯(FFmepg的事另說),我也第一時間去官網下載體驗了一下,結果發現一些有趣的事情。 是的,你沒看錯,QQ影音主界面上這個動畫效果是使用Lottie動畫實現的! 這讓我大為驚奇,我對Lottie瞭解還算是比較多的,但是Lottie常見應用於移 ...
  • " 【.NET Core項目實戰 統一認證平臺】開篇及目錄索引 " 上篇文章介紹了基於 密碼授權模式,從使用場景、原理分析、自定義帳戶體系集成完整的介紹了密碼授權模式的內容,並最後給出了三個思考問題,本篇就針對第一個思考問題詳細的講解下 是如何生成access_token的,如何驗證access_t ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...