System.Web.Mvc.dll 执行顺序
System.Web.Mvc.dll Execution Order
我试图找出 System.Web.Mvc.dll 和相关 DLL(Razor、网页)中代码的粗略流程。
我在 MVC 网络应用程序中有一个控制器。该控制器有一个端点,其中 returns 一个 ViewResult。这个 ViewResult 下一步去哪里?具体来说,View 信息如何传播到 Razor 引擎并得到渲染?代码的哪一部分进行了调用?
我已经尝试针对源代码进行调试,但很难做到这一点,所以如果有人熟悉该代码,我希望能得到一个概述。流程概览会很有帮助。
虽然这可能真的对某人有帮助,但我还是在没有调试器的情况下拼凑了一个粗略的流程草图。
这显然不是 100% 准确,但总体思路应该很清楚:
ViewResultBase.ExecuteResult => ViewResult.FindView
=> ViewEngineCollection.FindView => VirtualPathProviderViewEngine.FindView =>
if not found => abstract CreateView => RazorViewEngine.CreateView => View.Render (BuildManagedCompiledView.Render: 实际编译并创建页面) => RazorView.RenderView (实际调用ExecutePageHierarchy命令)
我试图找出 System.Web.Mvc.dll 和相关 DLL(Razor、网页)中代码的粗略流程。
我在 MVC 网络应用程序中有一个控制器。该控制器有一个端点,其中 returns 一个 ViewResult。这个 ViewResult 下一步去哪里?具体来说,View 信息如何传播到 Razor 引擎并得到渲染?代码的哪一部分进行了调用?
我已经尝试针对源代码进行调试,但很难做到这一点,所以如果有人熟悉该代码,我希望能得到一个概述。流程概览会很有帮助。
虽然这可能真的对某人有帮助,但我还是在没有调试器的情况下拼凑了一个粗略的流程草图。
这显然不是 100% 准确,但总体思路应该很清楚: ViewResultBase.ExecuteResult => ViewResult.FindView => ViewEngineCollection.FindView => VirtualPathProviderViewEngine.FindView => if not found => abstract CreateView => RazorViewEngine.CreateView => View.Render (BuildManagedCompiledView.Render: 实际编译并创建页面) => RazorView.RenderView (实际调用ExecutePageHierarchy命令)