私のテンプレートは次のようになります。
@using RazorEngine;
@model System.String
@{
var content = @"<div id=""text-block-container"">
@Html.Raw(""<h1>test</h2>"")
</div>";
Razor.SetTemplateBase(typeof(MvcTemplateBase<>));
var output = Razor.Parse<MyType>(content, new MyType() );
}
<div>
@Html.Raw(output)
</div>
MvcTemplateBaseは次のようになります。
public abstract class MvcTemplateBase<T> : TemplateBase<T> {
public HtmlHelper<object> Html { get; private set; }
public UrlHelper Url { get; private set; }
public void InitHelpers() {
var httpContext = new HttpContextWrapper(HttpContext.Current);
var handler = httpContext.CurrentHandler as MvcHandler;
if (handler == null)
throw new InvalidOperationException("Unable to run template outside of ASP.NET MVC");
}
編集されたタイトル:「クリア」未定義エラーの原因を突き止めました。TemplateBaseの独自のバージョンを定義しました。これは、これに名前空間が付けられたバージョンでした。エラーの原因となったClearメソッドを実装で定義しなかったため。
入力がnullでなくても、Razor.Parse呼び出しでnull例外が発生します。「raw」と提供されたモデルの両方が初期化され、値があります。
例のマイナーコーディングエラーを修正するために編集されました。