初识MVC,MVC里面的基本数据传递
MVC是一种表现形式,他将Web应用程序分成三个组件即:视图(View)控制器(Controller)模型(Model)。
M:Model 主要是存储或者是处理数据的组件
V:View 是用户接口层组件。主要是提供html模板并将Controller里获取的数据显示到页面中cshtml文件被用来处理视图的职责。
C: Controller 处理用户交互,负责处理业务,并获取数据装入Model中,然后交给视图。
ASPX是有一个前台页面类和一个后台页面类,前台页面类继承后台页面类,所以我们才可以在前台通过<%%>的形式访问到后台的对象。一般用户在浏览器输入url地址后,浏览器会去请求服务器,如果是动态的aspx页面,就会交给.NET Framwork框架去处理,服务器就会创建一个HttpHandler去处理这个请求,并且经过一系列的管道事件,在第八个管道的时候会创建页面类对象,打造页面控件树,在第11和12个管道之间就会调用后台类的ProcessRequest()方法,在经过一些处理后将页面发送给浏览器。
MVC是通过{Controller}/{action}/{id}的形式去访问控制器类里面的一个方法。浏览器拿到url首先去找Controller类,如果存在,找出下面的action方法。如果有参数可以传递参数,然后再action的方法里进行业务逻辑的处理,最后由action方法决定返回哪个视图。MVC实现了页面与数据的分离,降低了耦合度,使之操作更灵活,而且由于没有一系列的管道,比aspx的效率更高效一些。
MVC传递数据的方式有很多种,但本质上是一样的。
在控制器类里面我们可以写很多方法,如果需要返回视图,需要使用到View方法。View有很多重载,可以通过参数来选择要返回的视图。传递参数的例子以返回视图展示。
第一种:请求视图

视图

我们在控制器类中写的方法,是如何传递给视图的呢?通过源码看,会很直观。

这是编译后的程序集所展示的源码,在这里编译器将整个cshtml文件编译成一个类,凡是遇到标签(自动识别尖括号(<>)).就会调用父类的WebViewPage的BeginContext方法为其指明该标签应该加到"~/Views/Home/StuList.cshtml"这个页面上,凡是遇到C#代码,便直接输入。然后我们点进父类,下面截图父类的部分源码

我们找到了Model,下面再看看他是怎么样得到值得把

原来是绑定到ViewData上面的动态属性啊,但是ViewData的值从哪里来啊,继续往下面看

这个时候我们看到了,_viewData属性,翻到上上张图片,这个类不是定义了一个_viewData属性吗?原来视图的里面的值从这个变量中来的吗,等等,这个变量的值谁给的呢?

就是这个方法,这个方法在控制器类调用方法的时候,估计会调用这个方法,然后将控制器类的Model属性值赋值给视图的Model属性。这样就完成了数值传递的过程。
MVC传递值就是这样传递的,但是不可能我们就只穿一个对象进去吧,MVC扩展出来了一个动态类和两个数组类型的对象可以供我们使用。
就是
ViewBag(动态类) ViewData,TempData.
传递的Model只是加载ViewBag上的一个动态属性而已,所以我们可以给ViewBag添加任意属性,了解动态类参见(http://www.cnblogs.com/ljp-sun/p/4385409.html)在视图中,以同样的方式去取就好了。
具体用法
控制器类

视图
。
总结:
- MVC是一种设计模式,不同于ASPX,将Web程序分成三个部分:控制器、视图、模型。当发生一个请求的时候,服务器会先去找控制器,然后找出里面的方法,然后由方法决定调用什么视图。
- MVC传递数据是借助于动态属性的添加(Dynamic),控制器类的传递数据的对象和视图里面的数据对象不是相同的,但是在调用视图的时候,控制器会将对应的属性值赋给视图里的对应属性。
初识MVC,MVC里面的基本数据传递的更多相关文章
- ASP.NET MVC中将数据从Controller传递到视图
ASP.NET MVC中将数据从Controller传递到视图方法 1.ViewData ViewData的类型是字典数据,key-value 如:ViewData["Data"] ...
- 在ASP.NET MVC中以post方式传递数组参数的示例
最近在工作中用到了在ASP.NET MVC中以post方式传递数组参数的情况,记录下来,以供参考. 一.准备参数对象 在本例中,我会传递两个数组参数:一个字符串数组,一个自定义对象数组.这个自定义对象 ...
- 在ASP.NET MVC中以post方式传递数组参数的示例【转】
最近在工作中用到了在ASP.NET MVC中以post方式传递数组参数的情况,记录下来,以供参考. 一.准备参数对象 在本例中,我会传递两个数组参数:一个字符串数组,一个自定义对象数组.这个自定义对象 ...
- Spring MVC -- MVC设计模式(演示4个基于MVC框架的案例)
对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难, ...
- ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)
http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html 在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送 ...
- ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构
APS.Net MVC 浅谈[转] 来自MSDN 点击访问 MVC 理论结构 模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型.视图和控制器. ASP.NET MVC 框架 ...
- [转]Asp.Net MVC使用HtmlHelper渲染,并传递FormCollection参数的陷阱 【转】
在Asp.Net MVC 1.0编程中,我们经常遇见这样的场景,在新建一个对象时候,通过HtmlHelper的方式在View模型中渲染Html控件,当填写完相关内容后,通过Form把需要新建的内容Po ...
- MVC 使用Jquery的$.post传递参数
MVC中,如果要使用 $.post 给 COntroller 传递参数,需要类实现 属性 get set,这样才行
- Spring MVC 页面跳转时传递参数
页面仍然使用 JSP,在跳转时如果想传递参数则需要用到类 RedirectAttributes. 首先看看如何打开一个普通页面: // 登录页面(每个页面都要独立的 Action 来支持其呈现) @R ...
随机推荐
- Alfresco安装与配置图解
Alfresco安装与配置图解 Alfresco是一款开源的企业内容管理系统(ECM),为企业提供了日常的文档管理.工作流(可以和企业目前的OA协同接合使用).工作记录管理.知识管理.网络内容管理.图 ...
- PAT1024. Palindromic Number
//自己方法只能拿到15分后边老是又过不了的点,用了网上别人的方法,用库函数的翻转reverse(),参数分别是起始位置个结束位置,注意只能在原存储空间翻转,即比较对称时,再生请一个空间,将原来字符串 ...
- pycurl
http://www.cnblogs.com/lonelycatcher/archive/2012/02/09/2344005.html http://ju.outofmemory.cn/entry/ ...
- python发邮件遇到的端口号问题
在学习使用python发邮件的过程中, 遇到了一个问题:由于测试的时候使用的是QQ邮箱,要求必须使用SSL/TLS加密,所以有了下面的代码, from email.mime.text import M ...
- 【MVC】 文件及URL 的整理
我们平时在做Asp.Net MVC(以下就简称mvc)项目的时候,页面文件结构都用了"/Views/Controllers/page.aspx",而把一些PartialView呢放 ...
- 理解CSS中BFC
BFC(Block Formatting Context) 是Web页面中盒模型布局的CSS渲染模式.它的定位体系 属于 常规文档流 .摘自 W3C : 浮动,绝对定位元素, inline-block ...
- boost:进程管理
概述 Boost.Process提供了一个灵活的C++ 进程管理框架.它允许C++ developer可以像Java和.Net程序developer那样管理进程.它还提供了管理当前执行进程上下文.创建 ...
- nth-of-type和nth-child的区别
看CSS3时发现了一个nth-of-type选择器,发现平时基本没见过用,就研究了一下,w3c是这样说明的: :nth-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素 ...
- Objective-C数据类型、数据类型转换
数据类型 1.Objective-C数据类型可以分为:基本数据类型.对象数据类型和id类型. 2.基本数据类型有:int.float.double和char类型. 3.对象类型就是类或协议所声明的指针 ...
- 通过 XML HTTP 把文本文件载入 HTML 元素
新建一个.aspx文件 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="01-通 ...