Я искал способ повторно использовать представления MVC Razor в качестве шаблонов javascript для рендеринга на стороне клиента и нашел эту библиотеку (шаблон клиента Razor), который анализирует представления Razor в функции javascript.
Он не работает с движком 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 не проходит.