Мне нужно разобрать MVC
PartialView
, затем преобразовать его в простую строку html и отправить как HttpResponseMessage
из ApiController
.
Поискав в Интернете, я нашел RazorEngine
и безуспешно пытался использовать его, потому что он не поддерживает MVC
помощников, таких как @Html
или @Styles.Render("~/css")
, поэтому выдавал мне ошибки (следуя инструкции RazorEngine).
Итак, есть ли способ отобразить частичный вид из ApiController
?
Razor, MVC, WebPages, 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);
Спасибо!