我需要解析MVC
PartialView
,然后将其转换为纯HTML字符串,并将其从HttpResponseMessage
发送为ApiController
。
在网上搜索我发现RazorEngine
并且我尝试使用它失败,因为它不支持MVC
或@Html
等@Styles.Render("~/css")
助手,因此误导了我RazorEngine声明)。
那么有没有办法从ApiController
呈现部分视图?
Razor vs. MVC vs. WebPages vs. RazorEngine
Razor在这套技术中所处的位置经常存在混淆。本质上,Razor是解析框架,可以将文本模板转换为可编译的类。在MVC和WebPages方面,他们都利用这个解析引擎将文本模板(视图/页面文件)转换为可执行类(视图/页面)。通常我们会问诸如" @Html,@ Url"等等的问题。这些不是Razor本身提供的功能,而是MVC和WebPages框架的实现细节。
RazorEngine是Razor解析器的另一个消费者框架。我们结束了Razor解析器的实例化,并提供了使用运行时模板处理的通用框架。
我的代码:
Func<string, string, object, HttpResponseMessage> renderTemplate = (templatePath, templateName, model) =>
{
var viewPath = HttpContext.Current.Server.MapPath(templatePath);
var template = File.ReadAllText(viewPath);
//Here throws error because it does not support MVC helpers like "@Html"
var parsedTemplate = Engine.Razor.RunCompile(template, templateName, null, model);
var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(parsedTemplate) };
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return response;
};
我用这种方式调用上面的函数,但当然它不起作用:
renderTemplate(templatePath, "keyName", data);
谢谢!