如何解析PartialView并从ApiController返回一个Html字符串?

时间:2015-06-23 18:38:24

标签: c# asp.net-mvc razor razorengine asp.net-apicontroller

我需要解析MVC PartialView,然后将其转换为纯HTML字符串,并将其从HttpResponseMessage发送为ApiController

在网上搜索我发现RazorEngine并且我尝试使用它失败,因为它不支持MVC@Html@Styles.Render("~/css")助手,因此误导了我RazorEngine声明)。

那么有没有办法从ApiController呈现部分视图?

About RazorEngine

  

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);

谢谢!

0 个答案:

没有答案