我在没有MVC-Framework的情况下使用RazorEngine.
这意味着我没有用于创建模板的 HtmlHelper.
这意味着我没有用于创建模板的 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().