我需要更改Razor视图引擎生成的View子类的loginc。 据我所知,MVC解析Razor cshtml文件并生成IView子类Render方法,该方法将html标记写入writer对象。 在我的情况下因为环境/主机将有更多的信息(元数据)我想要使用它。 我需要进入Razor从cshtml解析AST并将其传递给CodeGenerator的地方。目前我正在尝试在aspnetwebstack源代码中找到该步骤。 我还没找到,我怀疑这些步骤是混合在一起的,所以没有单独获取AST并生成代码步骤。
答案 0 :(得分:0)
到目前为止我所拥有的是
Razor模板引擎解析器返回包含Span和Block元素的AST。 Spans似乎是叶节点。我做了一些测试代码,问题是span不分离不同的html节点,而是包含原始html字符串,直到切换到C#代码。例如:
<html><body><!-- Single statement block -->@{ var myMessage = \"Hello World \"+123; }</body></html>
给了我这棵树
* start block Markup
** span <html><body><!-- Single statement block -->
** start block Statement : @{ var myMessage = "Hello World "+666; }
*** span @
*** span {
*** span var myMessage = "Hello World "+123;
*** span }
** end block Statement
** span </body></html>
* end block Markup
有趣的是,如果解析器不提供有关html标签的信息并将连续的html部分合并为一个字符串,那么编辑器如何根据嵌套折叠它们?