【ASP.NET MVC】数据到客户端(7)

news2025/2/25 1:01:38

前文ViewBag数据在服务端动态生成页面,也可以传到客户端浏览器供JS使用。

一、数据从控制器到客户端

前文介绍,动态生成页面时,控制器的数据 并没有传递到 客户端,而是给自己来用,生成View 再利用http传递到客户端浏览器。

当然数据也是可以传递给客户端的,但有需要先搞明白传递到客户端的 数据 给谁用?谁能够使用这些数据? 答案很简单: JS   (JavaScript ) ,其他的JQuery 等可以视为对JS的包装,也可以在客户端 “动起来” 

传递方法:

1、直接用 HTML 的元素的 属性来进行数据来传递(样式设置为 style="display:none" ,不显示该元素)

参考代码:

页面

<input id="test" style="display:none" value='@ViewBag.data'/>
<script>
    window.onload = function () {
      
        alert(document.getElementById("test").value);
    }
</script>

控制器里添加:

  ViewBag.data = "Just test!";

思路比较简单,服务器生成页面的时候 取 ViewBag 数据,并将数据赋值给id 为test 的 input 元素的 属性value ,传递到客户端后,JS转载,在页面加载完成后 ( window.onload ),自动执行代码 alert(document.getElementById("test").value);  

2、直接在JS代码中传数据

比第一种方法更简单的是在JS代码中值贴数据,JS代码也是控制器生成的! 代码如下:

<script>
    var msg = '@ViewBag.data';
    window.onload = function () {
      
        alert(msg);
    }
</script>

要理解,var msg = '@ViewBag.data';  这行也是在服务端生成的!所ViewBag可以使用。

var msg = @ViewBag.data; 语法错误,记得带(单双)引号。

二、数据类型

以上可以解决数据传递到浏览器,但是数据类型也是需要解决的问题——数据类型肯定不限于简单的值类型,肯定还有其它复合数据类型,比如集合类型?组合类型?

例:Echarts用来绘制图形的数据就很可能是一系列的数据(X轴,Y轴),对应就是集合类型的数据。

服务器与客户端数据传递数据,目前而言,比较通用的是JSON——搞明白它的用途,理解JSON就并不难了

JSON就是用一种指定 方式来让数据保持它原有的类型信息。网络传输使用的是字节流:什么面向对象、集合类型、甚至是普通的整数、浮点数都没有!就是一堆字节(八位二进制),那么肯定需要一种方法来对数据进行“补充”说明,以此来解释传送过来的一堆字节流!

JSON补充一些符号,比如双引号(“”),括号(中括号、大括号)、逗号等,通过嵌套组合来描述数据之间的关系。

其实最主要的就两种结构: 集合与组合,值得注意的是它们两可以相互嵌套,如:传送一个学生集合,学生又包括了姓名、年龄等(组合类型),而且学生还包括选修的课程列表,组合的学生类型里又包括了一个选修课的集合类型!

以上比较繁琐地分析JSON的用途。

1、服务端使用JSON

可以使用C#以及其他扩展包提供的JSON操作函数来实现数据“序列化"——JSON把特定涵义的数据变成字节流,传递到客户端后,再按照JSON格式进行解释,完美!

方法很多:

JavaScriptSerializer 法

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using TestWeb.Models;

namespace TestWeb.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
           DataSet set= TestMysql.Query("select * from user");
           List<TestUser> list = new List<TestUser>();
           foreach (DataRow row in set.Tables[0].Rows)
           {
               TestUser tmp = new TestUser(row["name"].ToString(), 
                   row["psw"].ToString(), 
                   int.Parse(row["age"].ToString()));
               list.Add(tmp);
           }
           ViewBag.stu_list = list;

           JavaScriptSerializer jss = new JavaScriptSerializer();
           ViewBag.data = jss.Serialize(list);
            return View();
        }

    }
    public class TestUser
    {
        public string name;
        public string psw;
        public int age;
        public TestUser(string _name, string _psw, int _age)
        {
            name = _name;
            psw = _psw;
            age = _age;
        }
    }
}

页面:

<script>
    var msg = '@Html.Raw(ViewBag.data)';
    window.onload = function () {
      
        alert(msg);
    }
</script>

运行结果

要注意使用@Html.Raw 函数,页面如果改成:

<script>
    var msg = '@ViewBag.data';
    window.onload = function () {
      
        alert(msg);
    }
</script>

则运行结果为:

 很显然,对双引号的解释出了问题。

服务器JSON还有其他方法如:JSON.NET 和  扩展包Newtonsoft.Json

 ViewBag.data = JsonConvert.SerializeObject(list);

2、客户端JS使用JSON

代码:

<script>
    var msg = JSON.parse('@Html.Raw(ViewBag.data)');
    
    window.onload = function () {
        for (var i = 0; i < msg.length; i++) {
            alert("姓名:"+msg[i].name +" 年龄:"+msg[i].age +" 密码:"+msg[i].psw);
        }
        
    }
</script>

效果:

 很显然,浏览器对服务器传递的JSON字节流进行了正确的解释。

问题:

客户端是否可以将数据JSON序列化,传递到服务端控制器进行解释?当然可以,后续再探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/829606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rn打包react-native-orientation报错

rn 打包时控制台报Task :react-native-orientation:verifyReleaseResources FAILED 解决&#xff1a;修改node_modules下react-native-orientation依赖中的build.gradle文件

拓数派入选中国信通院“铸基计划”「高质量数字化转型产品及服务全景图」...

7月27日&#xff0c;由中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;主办的“2023数字生态发展大会”暨中国信通院“铸基计划”年中会议在京召开&#xff0c;本次大会深度展示了中国信通院在数字化领域的工作成果&#xff0c;并正式发布了《高质量数字化转…

FineReport SQL查询分页

参考&#xff1a;https://help.fanruan.com/finereport/doc-view-4795.html 参考示例为填报页面&#xff0c;以下为分页预览模式下SQL查询分页的制作。 参数说明&#xff1a; 模版参数&#xff1a;gPageSize每页显示数量、gPageNo当前页数 数据集结果&#xff1a;totalcnt总数…

S形速度曲线轨迹规划(SMART PLC梯形图源代码)

有关S形速度曲线轨迹规划相关内容,可以查看下面相关文章,这里不再赘述公式推导过程。 S速度曲线轨迹规划问题(普通变频位置闭环控制算法介绍+SCL代码)_RXXW_Dor的博客-CSDN博客位置控制用PD控制器,详细内容介绍请查看下面博客文章:PD控制器算法详细解读_RXXW_Dor的博客-CS…

宠物医疗进化:互联网宠物医院开发改变兽医服务方式

随着互联网的飞速发展&#xff0c;各行各业都在积极探索数字化转型的可能性。而宠物医疗行业也不例外。互联网宠物医院的开发将为宠物主人和兽医带来许多好处。下面我们将介绍一些互联网宠物医院开发的好处。   提供便利的服务&#xff1a;互联网宠物医院的开发将使宠物主人能…

C# Blazor 学习笔记(5):blazor文件夹组件引入

文章目录 前言文件夹组件引入文件夹分类文件引入解决方法 前言 为了更好的组件化管理整个文件&#xff0c;我选择使用分文件夹对项目组件进行分类。 文件夹组件引入 文件夹分类 Shared&#xff1a;Layout布局空间放置地方&#xff0c;由于默认创建&#xff0c;动也不好动&a…

一元三次方程求解

一元三次方程求解 题目描述提示输入输出格式输入格式输出格式 输入输出样例输入样例输出样例 算法分析A C 代码 题目描述 有形如&#xff1a; a x 3 b x 2 c x d 0 ax^3bx^2c^xd0 ax3bx2cxd0一元三次方程。给出该方程中各项的系数 ( a a a&#xff0c; b b b&#xff0c;…

如何使用大模型处理生活繁琐的工作

如果每封电子邮件、每个带有订单、发票、投诉、录用请求或工作申请的 PDF 都可以翻译成机器可读的数据&#xff0c;会怎样&#xff1f;然后可以由 ERP / CRM / LMS / TMS 自动处理吗&#xff1f;无需编程特殊接口。 听起来很神奇&#xff1f;它确实有一些魔力。但最近已成为可…

山西电力市场日前价格预测【2023-08-04】

日前价格预测 预测明日&#xff08;2023-08-04&#xff09;山西电力市场全天平均日前电价为388.01元/MWh。其中&#xff0c;最高日前电价为447.89元/MWh&#xff0c;预计出现在19: 30。最低日前电价为348.29元/MWh&#xff0c;预计出现在13: 30。 价差方向预测 1&#xff1a; 实…

掌握Java JDK 1.8 API帮助文档中文版,事半功倍编程

文章目录 1. JDK 1.8 API帮助文档简介2. 如何查阅JDK 1.8 API帮助文档中文版2.1 在线文档2.2 本地文档2.3 集成开发环境&#xff08;IDE&#xff09; 3. 如何使用JDK 1.8 API帮助文档中文版3.1 寻找类和方法3.2 阅读文档说明3.3 查看示例代码 4. 总结 引言&#xff1a; Java是一…

UML—用例图的那些事

目录 背景: 1.用例图的发展史 过程: 1.用例图中的元素和关系 2.应用中的例子 总结&#xff1a; 背景: 1.用例图的发展史 用例图是一种常用的软件工程工具&#xff0c;用于描述系统的功能需求和用户与系统的交互。它在软件开发过程中起到了重要的作用&#xff0c;并且经历了…

工业级芯片 | 拓尔微TMI8920/8940D集成化优势,替代分立器件

电磁阀驱动器作为一种重要的控制装置&#xff0c;在工业设备、汽车、智能家居等行业得到了广泛应用&#xff0c;尤其对于工业设备来说需要长时间连续工作的情况下&#xff0c;芯片的稳定性和可靠性是重中之重。 目前市面上的阀门驱动大部分还在使用传统P-MOSFET驱动电路。相对…

初阶C语言-数组

“少年没有偏旁&#xff0c;自己便是华章&#xff01;” 今天我们继续一起来学习一下数组的相关知识点。 数组 1.一维数组的创建和初始化1.1 数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化2.1二维数组的创建2.2二维数组…

安达发|APS系统帮助家具行业建立精益生产计划

随着家具企业的业务量不断扩大&#xff0c;仅依靠传统的ERP系统和人工生产调度已经不能满足精益生产改进的要求。建立高效的精益生产计划模型及其对应的组织结构&#xff0c;提高整个供应链计划的效率&#xff0c;优化计划结果&#xff0c;从而提高供应链的运作效率&#xff0c…

VSCode C/C++ 分目录编译配置

分目录编译配置记录 launch.json文件 注释处为修改内容 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configur…

ChatGPT已打破图灵测试,新的测试方法在路上

生信麻瓜的 ChatGPT 4.0 初体验 偷个懒&#xff0c;用ChatGPT 帮我写段生物信息代码 代码看不懂&#xff1f;ChatGPT 帮你解释&#xff0c;详细到爆&#xff01; 如果 ChatGPT 给出的的代码不太完善&#xff0c;如何请他一步步改好&#xff1f; 全球最佳的人工智能系统可以通过…

MATLAB算法实战应用案例精讲-【自动驾驶】路径规划

目录 前言 几个高频面试题目 无人车运动规划&#xff0c;路径规划&#xff0c;轨迹规划的区别和联系&#xff1f; 算法原理 路径规划算法原理 1.建立轨迹规划坐标系 2、建立初始规划轨迹 3. 轨迹曲线插值 车辆路径规划跟随原理 运动规划 什么是Motion Planning Moti…

Vite首次启动慢的问题

前言 ::: warning ​ 众所周知&#xff0c;通常情况下Vite要比Webpack快&#xff0c;但经过实际感受&#xff0c;默认情况下&#xff0c;Vite项目的启动速度确实很快&#xff0c;但如果某个界面是第一次进入&#xff0c;且依赖比较多或者比较复杂的话&#xff0c;就会很慢&am…

记一次 .NET某培训学校系统 内存碎片化分析

一&#xff1a;背景 1. 讲故事 前些天有位朋友微信上找到我&#xff0c;说他们学校的Web系统内存一直下不去&#xff0c;让我看下到底是怎么回事&#xff0c;老规矩让朋友生成一个dump文件丢给我&#xff0c;看一下便知。 二&#xff1a;WinDbg 分析 1. 托管还是非托管 要…

elasticsearch 配置用户名和密码

无密码的其他配置项在&#xff1a;https://blog.csdn.net/Xeon_CC/article/details/132064295 elasticsearch.yml配置文件&#xff1a; xpack.security.enabled: true xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: /path/to/elastic-certi…