【ASP.NET MVC】生成页面(6)

本应该继续数据库访问的问题进行探讨,前文确实比较LOW。但本人认为:初学者需要解决的是快速了解知识路线的问题,所谓“生存问题”,所以,干脆把流程先走完。

一、页面生成

下面这张图在前面已经介绍过:

 前文其实已经 “初步” 解决了数据库读写操作了(可理解为 C 到 M 的双向通道已经完成)!剩下的问题是:

1、页面生成:控制器根据用户访问需求、数据库内容,动态生成页面;(C --->  V 的)

2、页面的数据传送到控制器   (V  ---- >  C)

页面生成包括两大部分:

1、数据传递,控制器数据怎么到页面,同时,数据类型的生存期也应该注意

2、页面元素的动态生成:框架一般都是固定的,但内容应该是动态生成

控制器到页面数据可以通过 ViewBag   ViewData 、TempData等”动态“容器来实现:容器表明数据很多,动态意味着数据的类型并非固定的,而是动态的,依据约定进行 ”装卸“ 即可。

在asp.net mvc程序设计中,传递数据常常会用到viewdata、viewbag、tempdata,这3个对象都可以用来传递数据,但他们在细节中有很多的不同之处。
ViewData:ViewData是一个字典集合,通过key值读取对应的value使用方法:ViewData["myname"]="张三"
ViewBag:ViewBag是动态类型,作用和ViewData一样,都是用来存储信息,有一些不同的是ViewData是object类型,ViewBag是动态类型,从运行效率上来讲,ViewBag高于ViewData。在实际开发中,通不只用其中一种。使用方法:ViewBag.data="张三"
TempData:跨请求数据传递,它的机制类似于Session对象,不同的页面之间可以传递参数,但TempData只保存上一次的数据,当页面再次刷新,数据消失。使用方法:TempData["myname"]="张三"

以上摘抄自网络。因为不重要,直接用 ViewBag 来的简单!

使用范例:续上文例 Index Action中添加:

 页面也进行修改:

 运行结果:

 代码就不贴了,就几行,很简单就完成数据传递:ViewBag 里塞进去,在 CSHTML文件里用Razor 的语法来完成动态生成页面。

 二、改进代码

为了简单,先在控制器下添加一个类,该类就是对表user的描述,以下是HomeController.cs的代码:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;
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;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;}}
}

视图类进行修改:Index.cshtml

@{List<TestWeb.Controllers.TestUser> list = ViewBag.stu_list;
}
<table><thead>   //表头<tr><th>姓名</th><th>密码</th><th>年龄</th></tr></thead>@foreach (TestWeb.Controllers.TestUser item in list)  //C#遍历集合{ <tr><td>@item.name</td><td>@item.psw</td><td>@item.age</td></tr>}</table>

先看结果:

 这里不仅仅是由简单数据到对象,到对象集合的传递问题,还涉及到两个重要问题:页面动态生成,以及数据类型的作用范围

重要结论:页面是在控制器,或者说是服务端生成的,也就是所谓的 ViewBag 的数据并非已传送到客户端 浏览器 !从ViewBag里 ”拆“ 出来的数据,仍然在服务器上使用。——可以简单地理解为使用 @ 拆出来的数据还是在服务器上使用,作用是用来 ”辅助“ 服务器生成所需要的 页面。页面都是html + css + js 等,动态嵌入数据和元素很麻烦,那么用 Razor 语法来实现吧!

页面是控制器用 Razor 动态生成,数据类型作用范围仅限于服务端,客户端仅仅能够执行的代码是JS(肯定不是C#)。

问题:

数据是否需要到客户端去通过JS使用呢?——当然要,比如echarts 画图,就要用到数据!这个问题在后面再探讨。

PS:

1、echarts 画图 能不能 在服务端完成?当然不行,那是一个JS ,在浏览器上运行的!

2、js能不能使用  List、类等数据类型?当然不行,难道浏览器上装一个C#的代码编译器?

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

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

相关文章

.Net6 Web Core API --- Autofac -- AOP

目录 一、AOP 封装 二、类拦截 案例 三、接口拦截器 案例 AOP拦截器 可开启 类拦截器 和 接口拦截器 类拦截器 --- 只有方法标注 virtual 标识才会启动 接口拦截器 --- 所有实现接口的方法都会启动 一、AOP 封装 // 在 Program.cs 配置 builder.AddAOPExt();//自定义 A…

探索PostgreSQL的新功能:最新版本更新解析

PostgreSQL作为一种强大而开源的关系型数据库管理系统&#xff0c;不断在不断进化和改进。每一次的版本更新都带来了更多功能和改进&#xff0c;让用户在处理大规模数据和复杂查询时体验更好的性能和功能。在本文中&#xff0c;我们将深入探索PostgreSQL的最新版本更新&#xf…

ARM裸机-14(S5PV210的时钟系统)

1、时钟系统 1.1、什么是时钟 时钟是同步工作系统的同步节拍 1.2、SoC为什么需要时钟 Soc内部有很多器件&#xff0c;例如CPU、串口、DRAM控制制器、GPIO等内部外设&#xff0c;这些东西要彼此协同工作&#xff0c;需要一个同步的时钟系统来指挥。这个就是我们SoC的时钟系统。…

面向城乡公交的嵌入式系统远程升级设计方案

针对城乡公交站牌显示终端现场升级与维护困难的问题&#xff0c;提出了一种基于应用程序&#xff08;IAP&#xff09;技术的嵌入式系统远程升级设计方案。 通过IAP技术配合改良过的远程升级程序代替传统的现场烧写调试&#xff0c;节约了奔赴现场调试的时间和成本。 针对远程…

Gradle-02:问题Plugin with id ‘maven‘ not found

1. 背景 在一次使用 Gradle 构建自己项目&#xff0c;完事&#xff0c;需要上传到本地 Maven 仓库&#xff0c;因为事先并不清楚 apply plugin: maven 插件已经被 Gradle 移除&#xff0c;找了一圈&#xff0c;才找到解决方案。 2. 原因 apply plugin: maven def localRepo f…

Statefulset 实战 1

上一部分与大家分享到 Statefulset 与 RplicaSet 的区别&#xff0c;以及 Statefulset 的特点&#xff0c;能做的一些事情及一些注意事项 现在我们来尝试使用 Statefulset 来部署我们的应用&#xff0c;我们可以需要有应用程序&#xff0c;然后有持久化卷 开始使用 Statefuls…

服务器文件上传后,客户端下载-webscoket一对一

主要端末&#xff1a;小程序 云服务器 客户端A 客户端B 客户端C 流程&#xff1a; 1.小程序用户将文件通过小程序上传至云服务器&#xff0c;同时发送一个websocket&#xff0c;内部端口 2.云服务器与客户端ABC建立webscoket连接 3.当小程序用户需要上传到指定的客户端A电脑…

Cocos creator(2d) 使用 shader + uv 实现单张图片衔接滚动效果

在游戏中&#xff0c;当我们需要让背景图片无缝衔接无限滚动时(打飞机这种背景一直滚动&#xff0c;或者肉鸽游戏地图一直在走等等)&#xff0c;通常的做法是 在游戏中放两个背景node&#xff0c;在update中控制这两张背景图片的移动&#xff0c;并让其收尾衔接即可。(具体代码…

奥威BI系统|秒分析,更适合分析大数据

根据以往的经验&#xff0c;当数据量多到一定程度就容易导致系统卡顿、崩溃。这种现象给企业级数据分析造成了极大的困扰。随着业务发展扩大和分析需求精细化&#xff0c;企业需要一套能秒分析大数据的系统。而奥威BI系统就是这样一款可以秒分析大数据的商业智能系统。 奥威BI…

MybatisPlus-CRUD,不带条件构造器的常用方法

mapper层 Repository public interface UserMapper extends BaseMapper<User> BaseMapper中封装好了增删改查的方法 后面直接调用就好了 测试类 SpringBootTest public class CrudTest {Autowiredprivate UserMapper userMapper;//新增Testpublic void insert(){//没…

考研408 | 【计算机网络】概述

计算机网络体系结构 计算机网络概述&#xff1a;1.概念&#xff0c;组成&#xff0c;功能&#xff0c;分类2.标准化工作及相关组织3.性能指标体系结构&参考模型&#xff1a;1.分层结构2.协议&#xff0c;接口&#xff0c;服务3.ISO/OSI模型4.TCP/IP模型 目录 计算机网络体…

外卖多门店小程序开源版开发

外卖多门店小程序开源版开发 外卖多门店小程序开源版的开发可以按照以下步骤进行&#xff1a; 确定需求&#xff1a;明确外卖多门店小程序的功能和特点&#xff0c;包括用户注册登录、浏览菜单、下单支付、订单管理等。技术选型&#xff1a;选择适合开发小程序的技术框架&…

Pytorch学习笔记 | GAN生成对抗网络 | 代码 | 生成数据 | 演变规律可视化

文章目录 用GAN网络生成1010格式规律的数据测试判别器代码效果首次实现生成对抗网络GAN代码结果用GAN网络生成1010格式规律的数据 测试判别器 代码 # 用GAN网络生成1010格式规律的数据import torch import torch.nn as nn # nn全称是neural network,用于构建神经网络模型的…

MySQL常用操作

1. 对某字段进行修改&#xff08;修改字段类型、类型长度、默认值、注释&#xff09; -- 对某字段进行修改&#xff08;修改字段类型、类型长度、默认值、注释&#xff09;&#xff08;COLUMN关键字可以省略不写&#xff09; ALTER TABLE 表名 MODIFY [COLUMN] 字段名 新数据…

二维网格划分 LRU缓存设计

背景 有大量的二维矩形需要存储查看点在哪些矩形中给定一个矩形 查看与哪些矩阵相交项目背景与图形图像基本无关&#xff0c;只涉及大文件分块读取&#xff0c;所以不用实现游戏行业中的物理引擎 设计思路 使用空间划分算法&#xff1a;二维栅格将整个空间划分为多个小区域。…

七、Spring 面向切面编程(AOP)学习总结

文章目录 一、初识面向切面编程&#xff08;AOP&#xff09;1.1 什么是 AOP1.2 AOP的应用场景1.3 Aop 在 Spring 中的作用1.3.1 Aop 的核心概念 1.4 使用 Spring 实现 AOP1.4.1 方式一&#xff1a;使用 Spring API 接口实现 AOP 【主要是SpringAPI接口实现】1.4.2 方式二&#…

4-golang爬虫下载的代码

golang爬虫下载的代码&#xff1a; 下载程序的借鉴内容&#xff1a; 这个是关于gbk&#xff0c;utf8等相互转换的包 github.com/axgle/mahonia" 一、标准下载代码 package downloaderimport ("log""net/http""io""github.com/axgle/…

掌握主动权:职场中如何主动寻找并拓宽工作领域

引言 在现代职场的竞争环境中&#xff0c;主动性是一种重要的优势。对于企业而言&#xff0c;员工的主动性是其成功的关键因素之一。而对于个人职业发展来说&#xff0c;主动性能帮助我们把握更多的机会&#xff0c;提升我们的职业能力。因此&#xff0c;学会在职场中主动寻找…

mybatisJava对象、list和json转换

1. 参考mybatis-plus mybatis Java对象、list和json转换 网上好多不靠谱&#xff0c;参考mybatis-plus中TableField&#xff0c;mybatis中自定义实现 这样不需要对象中属性字符串接收&#xff0c;保存到表中&#xff0c;都是转义字符&#xff0c;使用时还要手动转换为对象或者…

车载总线系列——J1939三

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 没有人关注你。也无需有人关注你。你必须承认自己的价值&#xff0c;你不能站在他人的角度来反对自己。人…