首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Razor视图引擎在解析.cshtml后会创建IView对象吗?

Razor视图引擎在解析.cshtml后会创建IView对象吗?
EN

Stack Overflow用户
提问于 2019-08-06 21:18:56
回答 1查看 272关注 0票数 0

我的教科书展示了如何编写自定义视图引擎的示例(实现IViewEngine,它使用的视图是实现IView的类

代码语言:javascript
复制
public interface IViewEngine{
   ViewEngineResult FindView(ActionContext context, string viewName, bool isMainPage);
   ViewEngineResult GetView(string executingFilePath, string viewPath, bool isMainPage);
}

代码语言:javascript
复制
public interface IView {
   string Path { get; }
   Task RenderAsync(ViewContext context);
}

下面是实现IView的自定义视图

代码语言:javascript
复制
public class DebugDataView : IView
{
    public string Path => String.Empty;

    public async Task RenderAsync(ViewContext context)
    {
        context.HttpContext.Response.ContentType = "text/plain";
        StringBuilder sb = new StringBuilder();
        sb.AppendLine("---Routing Data---");
        foreach (var kvp in context.RouteData.Values)
        {
            sb.AppendLine($"Key: {kvp.Key}, Value: {kvp.Value}");
        }
        sb.AppendLine("---View Data---");
        foreach (var kvp in context.ViewData)
        {
            sb.AppendLine($"Key: {kvp.Key}, Value: {kvp.Value}");
        }
        sb.AppendLine(context.ViewData.Model.ToString());
        await context.Writer.WriteAsync(sb.ToString());
    }
}

我有几个问题

Q1-是否意味着在.cshtml视图文件中的内容被razor解析后,razor将在幕后创建一个实现IView的视图对象,以便在RenderAsync中实现真正的内容?

Q2- FindViewGetView方法返回一个ViewEngineResult对象,那么谁将把ViewEngineResult对象转换为响应(客户端的html)、MVC或Razor引擎?

EN

回答 1

Stack Overflow用户

发布于 2019-08-06 21:37:35

不是你想的那样。从技术上讲,有一个底层的View<TModel> (它实现了IView),但这实际上是来自动作的东西。当你返回像View(model)这样的东西时,它返回的是一个ViewResult,在里面,它正在构建这个支持类。

实际的cshtml文件实际上只是一个文本文件。有一个对它的文件系统引用(即来自IView接口的Path ),但仅此而已。它本身并不是“编译”的。视图引擎将其路径提供给View<TModel>实例,然后加载该文件的内容并开始解析( Razor ),View<TModel>为该解析过程提供数据支持,即当它遇到Razor代码时,信息将从View<TModel>实例中拉出。

一旦视图被“渲染”。结果基本上只是一个字符串,然后将其转储到响应中。(从技术上讲,这是异步的,因此响应可以并且通常是逐步构建的,而不是在结束时创建的。然而,这并不真正与讨论密切相关。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57377019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档