.net – 在RazorEngine中使用语句(没有来自MVC的HtmlHelper)

我在没有MVC-Framework的情况下使用RazorEngine.
这意味着我没有用于创建模板的 HtmlHelper.

没关系,我不需要任何方法.
但我需要创建自己的方法,如BeginForm.

现在这些是用HtmlHelper.ViewContext.Writer.Write完成的,我没有.
是否有“开箱即用”的方式,或者我必须在这里做一些魔术吗?

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().

相关文章
相关标签/搜索