我正在寻找一种方法来重用我的 MVC Razor 视图作为客户端渲染的 javascript 模板,并找到了将 razor 视图解析为 javascript 函数的这个库(Razor Client Template)。
它与 Razor 引擎版本 2 不兼容,稍微挖掘一下表明这是因为 Razor 引擎的语法树已经过大修。在尝试修改内容时,我从 RazorViewEngine 解析器中发现了一些奇怪的结果。
我有一个非常简单的观点,就像这样:
@model Justis4.Models.EntityModel
<div>
@Model.PropertyOne
@Model.PropertyTwo
</div>
razor 客户端模板库从以下内容开始:
var host = new RazorEngineHost(newCSharpRazorCodeLanguage());
var engine = new RazorTemplateEngine(host);
var parserResults = engine.ParseTemplate(razorTemplate); //from string reader
var doc = parserResults.Document;
然后开始将生成的语法树解析为 javascript 函数。
当我通过语法树进行调试时,我看到了一些奇怪的东西。据我了解,Razor 引擎将视图拆分为不同类型的“块”和“跨度”。但如图所示,顶部的模型声明已被解析为标记,而不是代码。也有类似的奇怪之处,因此,其余的对 javascript 的解析失败了。