我正在使用
Razor Engine从数据库中动态编译我的剃刀视图.现在我使用Razor Engine 3.7.3.我看到很少有关于如何阅读html帮助程序并编译它的帖子,但它是旧版本的razor引擎.
我已经阅读了有关ITemplateServiceConfiguration的内容,但我真的不明白它是如何工作的.
我的问题是,如何在html内容中使用@Html(Html帮助器),@ Url(Url Helper)和@section(如@Section脚本,@ Section特色)成功运行compile()razorengine(v3.7.3)我的数据库?
我到目前为止所做的事情.我试图实现我从另一篇文章中获得的代码.该代码适用于较旧版本的剃刀引擎.他建议我们创建自己的帮助类:
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 : TemplateBase
{
private RazorUrlHelper _urlHelper = new RazorUrlHelper();
private RazorHtmlHelper _htmlHelper = new RazorHtmlHelper();
public RazorUrlHelper Url
{
get
{
return this._urlHelper;
}
}
public RazorHtmlHelper Html
{
get
{
return this._htmlHelper;
}
}
}
在解析之前,我们需要设置我们的配置:
Razor.SetTemplateService(new TemplateService( new TemplateServiceConfiguration()
{
BaseTemplateType = typeof(RazorTemplateBase<>)
};
));
result = RazorEngine.Razor.Parse(templateText, model);
RazorUrlHelper没有问题,但RazorHtmlHelper无法正确读取这些代码,因为它已被弃用:
ITemplate template = RazorEngine.Razor.Resolve(viewName);
ExecuteContext ec = new ExecuteContext();
RawString result = new RawString(template.Run(ec));