我正在使用没有 MVC 框架的 RazorEngine。这意味着我没有用于创建模板的 HtmlHelper。
没关系,反正我不需要它的任何方法。但我需要创建自己的方法,例如 BeginForm。
现在这些都是用我没有的 HtmlHelper.ViewContext.Writer.Write 完成的。是否有“开箱即用”的方式来做到这一点,还是我必须在这里做一些魔术?
我正在使用没有 MVC 框架的 RazorEngine。这意味着我没有用于创建模板的 HtmlHelper。
没关系,反正我不需要它的任何方法。但我需要创建自己的方法,例如 BeginForm。
现在这些都是用我没有的 HtmlHelper.ViewContext.Writer.Write 完成的。是否有“开箱即用”的方式来做到这一点,还是我必须在这里做一些魔术?
RazorEngine设计为派生您自己的类型以在引擎本身中使用。
首先创建自己的 Helpers:
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()
可用。
一个更简单的修复(现在)是将以下内容添加到顶部:
@using RazorEngine.Text
然后在您的模板中使用:
@(new RawString(Model.RawHtmlContents))
或者
@(new RawString("<h3>This is custom <b>HTMLM/b></h3>"))