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

这篇具有很好参考价值的文章主要介绍了【ASP.NET MVC】生成页面(6)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、页面生成

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

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

 前文其实已经 “初步” 解决了数据库读写操作了(可理解为 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中添加:

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

 页面也进行修改:

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

 运行结果:

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

 代码就不贴了,就几行,很简单就完成数据传递: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>

先看结果:

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

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

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

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

问题:

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

PS:

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

2、js能不能使用  List、类等数据类型?当然不行,难道浏览器上装一个C#的代码编译器?文章来源地址https://www.toymoban.com/news/detail-623406.html

到了这里,关于【ASP.NET MVC】生成页面(6)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ASP.NET Core 中的 MVC架构

    MVC架构把 App 按照逻辑分成三层: Controllers,接收 http request,配合 model,通过http response 返回 view,尽量不做别的事 Models, 负责业务逻辑,App 的状态,以及数据处理 Views,呈现 UI,如果UI 较复杂,应该使用View 组件, ViewModel, 或者 view 模板 Controller ASP.NET Core MVC 中的所有 Control

    2024年02月09日
    浏览(29)
  • DevExpress DXperience Crack Blazor, ASP.NET, ASP.NET MVC

    DevExpress DXperience helps you build applications for Windows, Web, mobile and tablet with all of the DevExpress single platform controls and more. The DevExpress DXperience Subscription includes hundreds of Desktop UI Controls (WinForms, WPF and Desktop Reporting), Web UI Controls (Blazor, ASP.NET, ASP.NET MVC and Core, Bootstrap Web Forms, JavaScript - jQ

    2024年04月11日
    浏览(30)
  • asp.net MVC markdown编辑器

    在 ASP.NET MVC 中,你可以使用一些第三方 Markdown 编辑器来让用户在网页上方便地编辑和预览 Markdown 内容。这些编辑器通常提供实时预览功能,将 Markdown 文本转换为实时渲染的 HTML,并支持编辑器工具栏来辅助用户编辑。 以下是一些流行的 ASP.NET MVC Markdown 编辑器: Editor.md :

    2024年02月15日
    浏览(33)
  • 【ASP.NET MVC】使用动软(一)(9)

    前文为解决数据库操作设计的  TestMysql  类,仅简单地封装了一个Query函数,代码如下: 很显然,一个函数去解决所有数据库中所有表的描述、操作,肯定是远远不够,即使完成系统功能也会使代码非常复杂。因此需要封装更多的功能。 ORM 是 Object Relational Mapping 的缩写。意

    2024年02月14日
    浏览(26)
  • 【ASP.NET MVC】使用动软(五)(13)

    前文完成的用户登录后的首页如下:     后续账单管理、人员管理等功能页面都有 相同的头部,左边和下边, 唯一不同的右边内容部分,所以要解决重复设计的问题。 在Views上右键添加新建项,选择布局页,名称可改: 拷贝相同的头部、左边、下边的HTML到布局页,需要加

    2024年02月14日
    浏览(29)
  • 【ASP.NET MVC】数据库访问(5)

    对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术 。  以上是官话,个人理解: 1、解决问题:数据库的访问 2、如何解决:数据库由表、记录 组成      -》    把表映射成面向对象的类   ,记录则是对

    2024年02月14日
    浏览(25)
  • 【ASP.NET MVC】使用动软(三)(11)

    上文中提到,动软提供了数据库的基本操作功能,但是往往需要添加新的功能来解决实际问题,比如GetModel,通过id去查对象:  这个功能就需要进行改进:往往程序中获取的是实体的其他属性,比如用户登录的时提供账号名和密码,需要根据账户名(唯一)去获取数据库中的

    2024年02月14日
    浏览(28)
  • 【ASP.NET MVC】使用动软(二)(10)

    按前文添加动态到工程 双击动软 完成新建数据库服务器后 ,需要关闭重新打开 选择简单三层,注意保存位置 注意切换数据库: 生成后拷贝五个文件夹到工程目录 注意目录结构: 添加四个项目到原来的工程: 右键项目-》添加-》现有的项目,一个个添加到工程: 添加引用

    2024年02月14日
    浏览(23)
  • 【ASP.NET MVC】使用动软(四)(12)

    需解决的问题: 网站登录往往需要用户名+密码验证,为避免重复验证,一般采用Cookie 、Session等技术来保持用户的登录状态: Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中; Cookie是客户端保存用户信息的一种机制,

    2024年02月14日
    浏览(29)
  • ASP.NET Core MVC -- 控制器

    默认控制器访问index 特定访问路径   特定路径访问,带参数

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包