• 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

  • 相关阅读:
    android:versionCode和android:versionName 用途
    ProgressDialog使用总结
    对 Android 开发者有益的 40 条优化建议
    Android TextView换行问题
    Android TextView自动换行文字排版参差不齐的原因
    Python 生成requirement 使用requirements.txt
    PLSQL简介
    python魔法方法详解
    深入了解Token认证的来龙去脉
    数组、链表、栈、队列和STL
  • 原文地址:https://www.cnblogs.com/changfutao/p/4396003.html
Copyright © 2020-2023  润新知