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

news2025/1/18 16:48:47

本应该继续数据库访问的问题进行探讨,前文确实比较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.coloradmin.cn/o/829249.html

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

相关文章

AI时代数据库如何Ready?TiDB率先给出答案

当ChatGPT横空出世的那一刻&#xff0c;很多行业都为之一震&#xff0c;意识到变革时刻已经到来。 数据库是最早“觉醒”且付之行动的领域之一。业内普遍认为&#xff0c;大模型所呈现出的强大能力&#xff0c;让DataAI成为数据库领域的大势所趋。大模型与数据的同频共振&…

【POSIX信号量】

文章目录 1 :peach:POSIX信号量 :peach:2 :peach:信号量的接口介绍 :peach:2.1 :apple:初始化信号量:apple:2.2 :apple:销毁信号量:apple:2.3 :apple:等待信号量:apple:2.4 :apple:发布信号量:apple: 3 :peach:基于环形队列的生产者消费者模型 :peach:3.1 :apple:环形队列:appl…

插入排序讲解

插入排序&#xff08;Insertion-Sort&#xff09;一般也被称为直接插入排序。对于少量元素的排序&#xff0c;它是一个有效的算法。插入排序是一种最简单的排序方法&#xff0c;它的基本思想是将一个记录插入到已经排好序的有序表中&#xff0c;从而一个新的、记录数增1的有序表…

JDK8:Optional详解与源码分析,如何优雅的处理空指针

文章目录 一、Optional概述1、烦人的NullPointerException2、Optional简介 二、Optional使用1、创建Optional对象2、isPresent()与ifPresent()应用&源码解析3、get()应用&源码解析4、orElseThrow()应用&源码解析5、map()应用&源码解析6、flatMap()应用&源码…

string【2】模拟实现string类(超详解哦)

string模拟实现 引言&#xff08;实现概述&#xff09;string类方法实现默认成员函数构造函数拷贝构造赋值运算符重载析构函数 迭代器beginend 容量size、capacity、emptyreserveresize 访问元素operator[] 修改insert插入字符插入字符串 appendpush_backoperatoreraseclearswa…

BGP----边界网关路协议

目录 一&#xff0c;BGP相关的特点 二、BGP特点&#xff1a; 三、BGP数据包 四、BGP的工作过程 五、名词 六、BGP的路由黑洞问题 七、BGP的防环机制 –水平分割 八、BGP的基本配置&#xff1a; 1.直连的EBGP邻居关系建立 2.IBGP邻居关系建立 3.EBGP邻居间存在多条…

【NetCore】06-配置框架

文章目录 1.配置框架1.1 核心包1.2 配置框架核心类型1.3 配置框架扩展点 2.命令行配置提供程序2.1 支持的命令格式2.2 命令替换模式 3. 环境变量配置提供程序3.1 使用场景3.2 特性 4.文件配置提供程序4.1 文件配置提供程序4.2 特性 5.配置变更监听-配置热更新能力的核心5.1 场景…

客服如何通过微信接收消息通知-唯一客服文档中心

当我们在自己网站上嵌入对接了客服代码&#xff0c;我们想要通过微信接收访客的消息提醒通知&#xff0c;可以通过扫描客服后台的微信二维码&#xff0c;即时收消息通知提醒。 我们网站地址&#xff1a;gofly.v1kf.com 客服后台 后台主页面板&#xff0c;就展示了一个微信二维码…

PHP http请求封装使用(POST.GET,PUT,DELETE)

封装的 sendRequest() 函数是一个通用的发送请求函数&#xff0c;可以发送 POST、GET、PUT、DELETE 请求。下面对该函数的代码进行具体讲解&#xff1a; <?php function sendRequest($method, $url, $data null, $contentType multipart/form-data, $headers array(),…

无人驾驶实战-第一课(自动驾驶概述)

在七月算法上报了《无人驾驶实战》课程&#xff0c;老师讲的真好。好记性不如烂笔头&#xff0c;记录一下学习内容。 ————————————————————————————————————————— 无人驾驶汽车的定义&#xff1a; 无人驾驶汽车是可载人的移动智能机器…

【ASP.NET MVC】动态与静态网站(3)

一、区别 静态网页&#xff08;站&#xff09; 用户通过浏览器提交访问需求&#xff0c;需求可以是默认首页或者指定的网站中的某个页面&#xff0c;WEB服务器查找对应的网页&#xff0c;通过HTTP协议发送到客户端&#xff0c;完成访问。 特点&#xff1a;每次访问、不同角色…

视频监控综合管理平台EasyCVR修改参数提示database or disk is full是什么原因?

EasyDarwin开源流媒体视频EasyCVR安防监控平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等能力。视频监控综合管理平台EasyCVR具备视频汇聚融合能力&#xff0c;平台基于云边端一体化架构&#xff0c;具有强大…

【MCU学习】GD32F427VG开发

&#xff08;一&#xff09;学习文档和例程 兆易创新GD32 MCU参考资料下载 1.GD232F4xx的Keil芯片支持包 2.标准固件库和示例程序 3.GD32F4xx_固件库使用指南_Rev1.2 4.用户手册&#xff1a;GD32F4xx_User_Manual_Rev2.8_CN 5.数据手册&#xff1a;GD32F427xx_Datasheet_Rev…

通信笔记——最小移频键控MSK

由2FSK→MSK存在以下几点&#xff1a; 1、如何实现已调信号的码元正交&#xff1b;2、如何实现相位连续&#xff0c;不突变。 1、以2FSK一般表示法出发&#xff0c;推导得出两种频率的约束关系 正交条件&#xff1a; 积化和差公式有&#xff1a; 当载波频率比较高&#xff…

类欧几里得算法学习笔记

偶然发现了学长发给我的一个学长的学长也是我的学长的一个数论 p p t ppt ppt&#xff0c;先不着急复习莫反杜教筛&#xff0c;按这个顺序来吧 0.随便说说 前一阵子确实学习状态不是很好&#xff0c;我感觉我个人学习状态也是忽好忽坏的&#xff0c;不过只要在学习状态好的时…

大麦链接源码 大麦一键生成订单截图

8.4最新版源码 更新了大麦链接模版 更新了大麦订单截图一键生成 下载源码&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

TM4C123的ROM函数和非ROM函数区别

前言 在开发TM4C123的时候&#xff0c;我看到ROM函数和非ROM函数。例如ROM_FPUEnable()和FPUEnable()函数&#xff0c;这两个就只是前缀不一样。有什么区别和不同&#xff1f; 相同点 ROM函数和非ROM函数的作用起始是一样的&#xff0c;比如上面的例子ROM_FPUEnable()和FPUEnab…

如何有效地扩展数据库服务器以满足日益增长的工作量

在当今以数据为驱动的世界中&#xff0c;企业面临着一个挑战&#xff0c;即在保证应用程序的最佳性能的同时&#xff0c;管理迅速增长的数据量。扩展数据库服务器在满足这些需求方面起着至关重要的作用。本篇博客将探讨各种策略&#xff0c;以有效地扩展数据库服务器&#xff0…

[C++]

C 一.C基础入门1.HelloWorld2.注释3.变量4.常量5.关键字6.命名规则 二.数据类型1.整形2.sizeof关键字3.浮点型4.字符型5.转义字符6.字符串型7.布尔类型8.数据的输入 三.运算符1.算数运算符2.赋值运算符3.比较运算符4.逻辑运算符 一.C基础入门 1.HelloWorld 首先到官网下载并安…

P2824 [HEOI2016/TJOI2016] 排序(线段树)(内附封面)

[HEOI2016/TJOI2016] 排序 题目描述 在 2016 2016 2016 年&#xff0c;佳媛姐姐喜欢上了数字序列。因而她经常研究关于序列的一些奇奇怪怪的问题&#xff0c;现在她在研究一个难题&#xff0c;需要你来帮助她。 这个难题是这样子的&#xff1a;给出一个 1 1 1 到 n n n 的…