MVC フレームワークなしで RazorEngine を使用しています。つまり、テンプレートを作成するための HtmlHelper がありません。
とにかく、そこからのメソッドは必要ありません。しかし、BeginForm のような独自のメソッドを作成する必要があります。
今、それらは私が持っていない HtmlHelper.ViewContext.Writer.Write で行われます。それを行うための「すぐに使える」方法はありますか、それともここで魔法をかける必要がありますか?
MVC フレームワークなしで RazorEngine を使用しています。つまり、テンプレートを作成するための HtmlHelper がありません。
とにかく、そこからのメソッドは必要ありません。しかし、BeginForm のような独自のメソッドを作成する必要があります。
今、それらは私が持っていない HtmlHelper.ViewContext.Writer.Write で行われます。それを行うための「すぐに使える」方法はありますか、それともここで魔法をかける必要がありますか?
RazorEngineは、エンジン自体で使用する独自の型を派生させるように設計されています。
最初に独自のヘルパーを作成します。
public class RazorHtmlHelper
{
public IEncodedString Partial(string viewName)
{
ITemplate template = RazorEngine.Razor.Resolve(viewName);
ExecuteContext ec = new ExecuteContext();
RawString result = new RawString(template.Run(ec));
return result;
}
}
public class RazorUrlHelper
{
public string Encode(string url)
{
return System.Uri.EscapeUriString(url);
}
}
次に独自のテンプレートを作成します。
public class RazorTemplateBase<T> : TemplateBase<T>
{
private RazorUrlHelper _urlHelper = new RazorUrlHelper();
private RazorHtmlHelper _htmlHelper = new RazorHtmlHelper();
public RazorUrlHelper Url
{
get
{
return this._urlHelper;
}
}
public RazorHtmlHelper Html
{
get
{
return this._htmlHelper;
}
}
}
解析する前に、TemplateServiceConfiguration を設定します。
Razor.SetTemplateService(new TemplateService(
new TemplateServiceConfiguration()
{
BaseTemplateType = typeof(RazorTemplateBase<>)
};
));
result = RazorEngine.Razor.Parse(templateText, model);
これで、RazorEngine がビュー@Html.Partial()
で@Url.Encode()
使用できるようになりました。