也许我没有在正确的地方调用RazorEngine。
在我的控制器操作中,我使用以下代码调用RazorEngine。但我认为这可能不正确,因为当它调用.Execute()然后进入MVC的GetActionCache()时,HttpContextBase.Items失败并带有“未实现的方法”异常。
我是以错误的方式调用RazorEngine吗? @ Html.LabelFor()工作正常。
string template = "@Html.EditorFor(model => model.OldPassword)";
string result = string.Empty;
var config = new RazorEngine.Configuration.TemplateServiceConfiguration
{
BaseTemplateType = typeof(System.Web.Mvc.Helpers.HtmlTemplateBase<>)
};
using (var service = new RazorEngine.Templating.TemplateService(config))
{
// Use template service.
RazorEngine.Razor.SetTemplateService(service);
result = RazorEngine.Razor.Parse(template, model);
}
答案 0 :(得分:0)
powercat97 over解决了这个问题的解决方法。 https://github.com/Antaris/RazorEngine/issues/46
我遇到很多麻烦的原因是没有设置上下文。创建新的ViewContext是不够的。 因此,通过调用一个视图,该视图又通过RenderAction()调用我们的RazorEngine代码,我们得到了上下文,并且MVC框架具有RazorEngine调用它所需的一切。
使用AccountController作为示例(HtmlTemplateBase来自RazorEngine issues with @Html和http://www.haiders.net/post/HtmlTemplateBase.aspx):
public ActionResult Test()
{
var model = new MySite.Models.LocalPasswordModel();
model.OldPassword = "MyOldPwd";
model.NewPassword = "SomeNewPwd";
return PartialView(model);
}
[ChildActionOnly()]
public string TestTemplate(MySite.Models.LocalPasswordModel vm)
{
string result = string.Empty;
string template = "@Html.EditorFor(model => model.OldPassword)";
var config = new RazorEngine.Configuration.TemplateServiceConfiguration
{
BaseTemplateType = typeof(HtmlTemplateBase<>)
};
using (var service = new RazorEngine.Templating.TemplateService(config))
{
// Use template service.
RazorEngine.Razor.SetTemplateService(service);
result = RazorEngine.Razor.Parse(template, vm, "MyTemplateName");
}
return result;
}
并在Test.cshtml中:
@model TestRazorEngine.Models.LocalPasswordModel
@{ Html.RenderAction("TestTemplate", new { vm = Model }); }