7

我正在使用没有 MVC 框架的 RazorEngine。这意味着我没有用于创建模板的 HtmlHelper。

没关系,反正我不需要它的任何方法。但我需要创建自己的方法,例如 BeginForm。

现在这些都是用我没有的 HtmlHelper.ViewContext.Writer.Write 完成的。是否有“开箱即用”的方式来做到这一点,还是我必须在这里做一些魔术?

4

2 回答 2

12

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()可用。

于 2013-08-04T23:33:42.940 回答
0

一个更简单的修复(现在)是将以下内容添加到顶部:

@using RazorEngine.Text

然后在您的模板中使用:

@(new RawString(Model.RawHtmlContents))

或者

@(new RawString("<h3>This is custom <b>HTMLM/b></h3>"))
于 2019-11-14T21:41:50.507 回答