Как разобрать PartialView и вернуть строку Html из ApiController?

Мне нужно разобрать MVC PartialView, затем преобразовать его в простую строку html и отправить как HttpResponseMessage из ApiController.

Поискав в Интернете, я нашел RazorEngine и безуспешно пытался использовать его, потому что он не поддерживает MVC помощников, таких как @Html или @Styles.Render("~/css"), поэтому выдавал мне ошибки (следуя инструкции RazorEngine).

Итак, есть ли способ отобразить частичный вид из ApiController?

О RazorEngine

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

Спасибо!


person CodeArtist    schedule 23.06.2015    source источник
comment
Возможно, вы сможете решить сборку, в которой в движке бритвы живет помощник Html. Помощник Html находится в сборке System.Web.Mvc.dll (msdn.microsoft.com/en-us/library/). См. раздел antaris.github.io/RazorEngine/ReferenceResolver.html для разрешения сборок.   -  person Jimmy Hannon    schedule 23.06.2015
comment
Это можно сделать в веб-API так же, как в MVC. Вы можете комбинировать это и это ответы, чтобы получить то, что вам нужно. Я только что попробовал, это сработало.   -  person Valyok26    schedule 24.06.2015