在RazorEngine中使用-State(没有来自MVC的HtmlHelper)

Ric*_*ard 7 .net razorengine

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

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

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

Eri*_*ips 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来创建自己的模板:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在解析之前设置TemplateServiceConfiguration:

Razor.SetTemplateService(new TemplateService(
  new TemplateServiceConfiguration()
  {
    BaseTemplateType = typeof(RazorTemplateBase<>)
  };
));

result = RazorEngine.Razor.Parse(templateText, model);
Run Code Online (Sandbox Code Playgroud)

现在RazorEngine具有@Html.Partial()@Url.Encode()在视图中可用.