csHtml ファイルを使って RazorEngine
試してみましたのでメモです。
実行
準備
NuGet で、RazorEngine をインストール後、
テンプレートファイル MessageTemplate.csHtml と、モデル用の MessageModel クラスを用意します。
・MessageModel クラス
public class MessageModel { public string Name { get; set; } public bool IsFirstTime { get; set; } }
出力
Web API プロジェクトのコントローラに書きましたが、Web API は全然関係ありません。(ステマ
下の用に書いて、出力させます。
public class ValuesController : ApiController { [HttpGet] public String Get() { var model = new MessageModel() { Name = "Taro", IsFirstTime = true }; String message = GetMessage(model); Debug.WriteLine(message); return message; } private string GetMessage(MessageModel model) { string template = GetTemplate("MessageTemplate"); return Razor.Parse(template, model); } private string GetTemplate(String templateName) { String templatePath = Path.Combine( HttpContext.Current.Server.MapPath("~/Templates"), String.Format("{0}.cshtml", templateName)); return File.ReadAllText(templatePath); } }
いろいろと
インテリセンス
csHtml 側の最初で
@using RazorTemplage.TemplateModels; @using RazorEngine.Templating; @inherits TemplateBase<MessageModel>
と書いたのは、インテリセンスを効かせるためです。
課題メモ
・if 文の中でインデントするとタブ文字が入ってしまう。インデントしたい。
・Html 以外で利用する場合、いちいち @Raw と書くのが少し面倒。
→ RazorEngine で Html エンコード処理を行わないようにする
・あらかじめテンプレートをコンパイルできるので、出力時の時間は気にしなくても良い…のか?
・抽象化。
もうちょっとで使えそう…??