大学毕业对MVC的概念还不是很清晰,总觉得MVC是和三层一样的,是同一级别的架构。其实不然,三层架构是:BLL(业务逻辑层),DAL(数据库访问层),UI(页面显示层),而MVC仅仅是属于三层架构UI层。可以说MVC就是为了更好的展示数据,如果把三层架构比作一个完整的人,那么MVC就是这个人的脸,用来展示东西。说这么多就是给刚接触MVC的人从概念上明白MVC是个什么东西,就是一种理念,一种展示数据的模式。

  说到MVC不得不说很早以前拖拉控件的时代,微软开发了Windows系统让小白就能接触电脑这些高科技产品,使得普通用户用图形化界面替换掉以前Linux黑窗口的时代,不得不说微软成功了。后来,微软感觉把普通用户变成小白不过瘾,企图把开发人员也变成小白,推出了WebForm,个人感觉这种想法很好,很超前,可能在很多年之后就没有我们这些“程序员”了只有设计。但是放到现在还是不太现实,刚推出的时候感觉很新奇就研究了下,托拉拽感觉很爽,可是那时候使用WebForm的企业死的很惨,因为就页面隐藏域藏得那些东西神仙都不知道是什么鬼,并且性能也是差的不要不要的,结果很快的死了(从微软刚发布的.net core不支持WebForm就可以看出微软放弃把程序员变成小白了)

  言归正传,聊聊MVC把,M(model),V(view),C(control)。model是control和view之间通过实体传输数据,control返回一个视图view可以通过model(实体)传递。view的强类型页面就可以通过在control中的方法中return view(model) 来让view可以通过Model来点出来要传递的数据。如果把model绑定到input的value上就会根据model有没有数据来显示要修改该的页面。

  在每一个action中都要有return一个继承自JsonResult的对象,其中包括最常见的 ViewResult(return View())视图、JsonResult(return Json())json字符串、ContentResult(return Content())原样输出 等。

control和view之间除了这种强类型传递数据之外还有另外三种方法来传递数据

如下所示:

1.使用ViewData传递数据

我们在Controller中定义如下(类型是ViewDataDictionary,可以看出这个方式适合传递键值对):

ViewData[“Message_ViewData”] = “ Hello ViewData!”; 

然后在View中读取Controller中定义的ViewData数据,代码如下:

@Html.Encode(ViewData["Message_ViewData"]) 

js中读取ViewData中数据如下:

<pre name="code" class="javascript"><script type="text/javascript">
var viewData = '@ViewData["Message_ViewData"]';
</script>

2.使用ViewBag传递数据

我们在Controller中定义如下(其类型是dynamic可以动态的添加其类型,结构也变得多样化):

ViewBag.Message_ViewBag =  “ Hello ViewBag !”;  

然后在View中读取Controller中定义的ViewBag数据,代码如下:

@Html.Encode(ViewBag.Message_ViewBag)

js中读取ViewBag中数据如下:

<script type="text/javascript">
var viewBag= '@ViewBag.Message_ViewBag';
</script>

3.使用TempData传递数据

我们在Controller中定义如下(其类型是TempDataDictionary,也是适合传递键值对,但是这种传递数据的方式有种特点,就是只能存在两次http请求,只要取出来就会销毁,经过研究发现其原来是把数据存到session中,取出一次后就会自动把session销毁):

TempData[“Message”] = “Hello word!”; 

然后在View中读取Controller中定义的TempData数据,代码如下:

@Html.Encode(TempData["Message_TempData"]) 

js中读取TempData中数据如下:

<script type="text/javascript">
var tempData = '@TempData["Message"]';
</script>

浅谈.net MVC的更多相关文章

  1. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...

  2. JAVAEE企业级应用开发浅谈之MVC 中的V-VIEW视图

    Step1.情景概要 Hello,小伙伴们,好久不见,之前跟大家分享了三层架构与MVC思想,相信大家对于这两块内容有了相对清晰的个人认识了,既然我们讲到了MVC,这里我们接着这块内容继续往下深入,今天 ...

  3. 浅谈对MVC的认识

    MVC是model(模型),view(视图),Controller(控制)的缩写. 模型层负责提供数据,和数据库相关的操作都交给模型层处理: 视图层提供交互的界面,其输出数据: 控制层负责接收各种请求 ...

  4. 浅谈对MVC的理解

    1.MVC设计模式理解 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...

  5. 【ASP.NET MVC系列】浅谈NuGet在VS中的运用

    一     概述 在我们讲解NuGet前,我们先来看看一个例子. 1.例子: 假设现在开发一套系统,其中前端框架我们选择Bootstrap,由于选择Bootstrap作为前端框架,因此,在项目中,我们 ...

  6. 【ASP.NET MVC系列】浅谈表单和HTML辅助方法

    [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...

  7. 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)

    lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...

  8. 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  9. 【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

随机推荐

  1. 使用RazorGenerator和预编译MVC引擎将Razor视图编译成DLL

    Web开发中常常会有跨页面.跨站点.跨项目组的复用模块(界面),最常见的就是如下方所示的Web页面上用于显示登录或用户名的头部模块, 使用ASP.NET MVC开发中,常见的做法是写成部分视图,本文的 ...

  2. Message Loop 原理及应用

    此文已由作者王荣涛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Message loop,即消息循环,在不同系统或者机制下叫法也不尽相同,有被叫做event loop,也有 ...

  3. iOS 添加 Watch OS 1 应用后无法运行 An error was encountered while running (Domain = LaunchServicesError, Code = 0)

    在 iOS 应用基础上我添加了一个 Watch OS 2 应用,运行良好.又加了一个 Watch OS 1 应用,然后就所有 Target 都不能运行了. 运行时说 An error was enco ...

  4. RabbitMq初探——消息持久化

    消息持久化 前言 通过上一节,我们知道,有消息确认机制,保证了当消费者进程挂掉后,消息的不丢失. 但是如果rabbitmq挂掉呢?它的队列和消息都会丢失的.为了保证消息在rabbitmq挂掉重启后不丢 ...

  5. 比较有用的php代码片段

    一 从网页中提取关键词 $meta = get_meta_tags('http://www.emoticode.net/'); $keywords = $meta['keywords']; // Sp ...

  6. “全栈2019”Java异常第二十章:自定义异常详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  7. django 模型中 class Meta 内 各种属性的用法

    Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.下面对此作一总结: abstract 这个属性是定义当前的模型类是不是一个抽象类.所谓抽象类是不会相应数据库表的 ...

  8. jquery中选择器的 html() text() val() attr() 方法的区别与使用方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. CentOS6.5下samba服务

    为减少错误已提前关掉了SELinux,防火墙. 安装rpm包: samba-3.6.9-164.el6.x86_64.rpm 启动检测:samba服务可以正常启动!(证明RPM安装正常) 配置文件位置 ...

  10. service iptables xxx无效命令的情况下,如何启动/重启iptables

    最近在CentOS 7.6下使用service iptables xxx相关命令,提示如下错误:The service command supports only basic LSB actions ...