我在没有MVC-Framework的情况下使用RazorEngine。 这意味着我没有用于创建模板的HtmlHelper。
没关系,我不需要任何方法。 但是我需要创建自己的方法,比如BeginForm。
现在这些是用HtmlHelper.ViewContext.Writer.Write完成的,我没有。 是否有“开箱即用”的方式,或者我必须在这里做一些魔术吗?
答案 0 :(得分: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);
}
}
接下来创建自己的模板:
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()
。
答案 1 :(得分:0)
一个更简单的解决方法(现在)是在顶部添加以下内容:
@using RazorEngine.Text
然后在您的模板中使用:
@(new RawString(Model.RawHtmlContents))
或
@(new RawString("<h3>This is custom <b>HTMLM/b></h3>"))