MVC Razorビューをクライアント側レンダリング用のjavascriptテンプレートとして再利用する方法を探していましたが、razorビューをjavascript関数に解析するこのライブラリ(Razorクライアントテンプレート)を見つけました。
Razorエンジンバージョン2ではボールを再生しません。少し掘り下げてみると、これはRazorエンジンの構文ツリーが見直されたためです。物事を変更しようとして、RazorViewEngineパーサーからいくつかの奇妙な結果を見つけました。
私は次のように非常に単純なビューを持っています:
@model Justis4.Models.EntityModel
<div>
@Model.PropertyOne
@Model.PropertyTwo
</div>
かみそりのクライアントテンプレートライブラリは、次のように始まります。
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への残りの解析は失敗します。