Mvc学习笔记(4)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Mvc学习笔记(4)

Mvc学习笔记(4)

 2015/4/6 15:48:12  新手初学  程序员俱乐部  我要评论(0)
  • 摘要:上文我介绍了如何将控制器里的值传递给视图,但是是如何传递的呢?原理是什么?视图page.cshtml在编译的时候也会编译成一个类,然而这个类会继承于WebViewPage<object>然而这个类的父类就是WebViewPage<object>,然而WebViewPage<TModel>的父类WebViewPageWebViewPage类也有ViewData、ViewBag、TempData、Model这四个属性
  • 标签:笔记 MVC 学习 学习笔记

上文我介绍了如何将控制器里的值传递给视图,但是是如何传递的呢?原理是什么?

视图 page.cshtml在编译的时候也会编译成一个类,然而这个类会继承于WebViewPage<object>

03页面编译成页面类

然而这个类的父类就是WebViewPage<object>,然而WebViewPage<TModel>的父类WebViewPage

22

WebViewPage类也有ViewData、ViewBag、TempData、Model这四个属性,但是如何从控制器类的这个四个属性传递到View类的这四个同名属性的呢?

下面我们剖析一下:

数据传递给视图类对象" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="01控制器类会将数据传递给视图类对象" src="/Upload/Images/2015040615/736B8CB8262D3335.png" width="1347" height="690" />

在控制器的方法里返回一个View方法,View方法返回ViewResult,ViewResult类又继承自ViewResultBase类,我们在ViewResultBase类里有一个ExecuteResult方法,我们从下图可以看到,参数是控制器上下文对象,因为View方法有多个重载,假如你直接return View();没有加任何参数的话,那么系统会自动判断this.ViewName是否为空,如果为空的话,那么将去RouteData里面拿到Action的名字即视图的名字。

ViewContext viewContext=new ViewContext(context,this.View,this.ViewData,this.TempData,output);

如上方法,将控制器上下文,ViewData,TempData传到ViewContext即视图上下文里。

接着调用this.View.Render(viewContext,output);  将视图上下文当参数渲染视图,然而this.View是一个IView接口,所以我们要去查一下谁实现了Iview接口,如下图RazorView和WebFormView视图引擎,找到RenderView方法,在这里面将Controller里的ViewData数据赋值给View视图的ViewData、TempData数据

 

 

333

666

777

上一篇: Cocoa cola——Cocoa Framework之原型模式 下一篇: 没有下一篇了!
发表评论
用户名: 匿名