覆盖Razor CodeGeneration

时间:2015-04-24 19:11:59

标签: asp.net-mvc-4 razor

我需要更改Razor视图引擎生成的View子类的loginc。 据我所知,MVC解析Razor cshtml文件并生成IView子类Render方法,该方法将html标记写入writer对象。    在我的情况下因为环境/主机将有更多的信息(元数据)我想要使用它。    我需要进入Razor从cshtml解析AST并将其传递给CodeGenerator的地方。目前我正在尝试在aspnetwebstack源代码中找到该步骤。    我还没找到,我怀疑这些步骤是混合在一起的,所以没有单独获取AST并生成代码步骤。

1 个答案:

答案 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部分合并为一个字符串,那么编辑器如何根据嵌套折叠它们?