zoukankan      html  css  js  c++  java
  • Mvc学习笔记(4)

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

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

    03页面编译成页面类

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

    22

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

    下面我们剖析一下:

    01控制器类会将数据传递给视图类对象

    在控制器的方法里返回一个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

  • 相关阅读:
    线性回归学习历程
    CART决策树的学习历程
    markdown测试
    开张大吉+代码测试
    使用tomcat启动dubbo项目
    ThreadLocal 工作原理、部分源码分析
    Dubbo项目demo搭建
    redis 操作 list 的测试
    redis 操作 hash 的测试
    redis 操作string 的测试
  • 原文地址:https://www.cnblogs.com/changfutao/p/4396003.html
Copyright © 2011-2022 走看看