【问题标题】:Override Razor CodeGeneration覆盖 Razor 代码生成
【发布时间】:2015-04-24 19:11:58
【问题描述】:

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

【问题讨论】:

  • 似乎在构建 AST 节点时,解析器会为每个节点附加代码生成器。

标签: asp.net-mvc-4 razor


【解决方案1】:

我目前拥有的是这个

Razor 模板引擎解析器返回一个包含 Span 和 Block 元素的 AST。跨度似乎是叶节点。我做了一些测试代码,问题是 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 部分合并为一个字符串,那么编辑器如何根据嵌套折叠它们?

【讨论】:

    猜你喜欢
    • 2016-08-07
    • 2021-06-26
    • 1970-01-01
    • 2018-08-22
    • 2016-07-09
    • 2018-01-11
    • 2016-10-28
    • 2015-03-22
    • 2015-11-20
    相关资源
    最近更新 更多