0

我需要解析 aMVC PartialView然后将其转换为纯 html 字符串并将其作为HttpResponseMessagefrom发送ApiController

搜索我发现的网络RazorEngine,我尝试使用它没有成功,因为它不支持MVC像这样的助手,@Html或者@Styles.Render("~/css")因此向我抛出错误(遵循 RazorEngine 声明)。

那么有没有办法从 a 渲染部分视图ApiController

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

谢谢!

4

0 回答 0