我在没有MVC-Framework的情况下使用RazorEngine.这意味着我没有用于创建模板的HtmlHelper.
没关系,我不需要任何方法.但我需要创建自己的方法,如BeginForm.
现在这些是用HtmlHelper.ViewContext.Writer.Write完成的,我没有.是否有"开箱即用"的方式,或者我必须在这里做一些魔术吗?
Eri*_*ips 12
该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);
}
}
Run Code Online (Sandbox Code Playgroud)
接下来创建自己的模板:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在解析之前设置TemplateServiceConfiguration:
Razor.SetTemplateService(new TemplateService(
new TemplateServiceConfiguration()
{
BaseTemplateType = typeof(RazorTemplateBase<>)
};
));
result = RazorEngine.Razor.Parse(templateText, model);
Run Code Online (Sandbox Code Playgroud)
现在RazorEngine具有@Html.Partial()和@Url.Encode()在视图中可用.