2016-03-04 3 views
0

ОтказAntaris RazorEngine - Helper Лямбда выражения

Если вы заметили какие-либо ложные предположения в чем-нибудь ниже, пожалуйста, дайте мне знать. Я вложил в это приличную работу, но если есть лучший способ, я счастлив бросить то, что у меня есть.


Short Version

мне нужно повторить функциональность @Html.DisplayFor() функции MVC без доступа к контексту контроллера.


фон

Я пытаюсь создать PDF-документы из бритвенных файлов (.cshtml). Раньше я использовал Rotativa (на основе wkhtml), который, казалось, работал достаточно хорошо. Тем не менее, мне понадобится генерировать сотни документов порой, и я хотел бы сделать это асинхронно, чтобы сэкономить время. К сожалению, кажется, что что-либо асинхронное не может получить доступ к контексту Controller, который требуется Rotativa. Кроме того, исследования показывают, что wkhtml вообще не может выполняться асинхронно.


Текущего Покушение Решение

Итак, теперь я пытаюсь использовать Antaris RazorEngine для отображения мнения бритвы HTML строк без используя контекст контроллера. Затем я напишу этот HTML в iTextSharp, чтобы сделать PDF. Я считаю, что это должно быть в состоянии запускать асинхронно (если кто-то знает что-то противное, пожалуйста, поправьте меня).


Проблема с раствором

просмотров Наша Razor в значительной степени зависят от объекта HtmlHelper (который требует доступа к контексту контроллера), чтобы сделать такие вещи, как @Html.LabelFor() или @Html.DisplayFor(). Я считаю, что мне удалось воспроизвести функциональность LabelFor как автономный вспомогательный метод. К сожалению, метод DisplayFor оказался более сложным. С LabelFor мне просто нужно было получить информацию об атрибутах объекта, переданного через выражение лямбда. Напротив, DisplayFor необходимо получить значение объекта объекта, переданного через выражение лямбда.


Что я Пробовал

  • Я рассмотрел десятки сообщений (example) о получении значения, что все требуют доступа к объекту HtmlHelper, и поэтому ControllerContext, который выиграл Не работай.
  • Я нашел несколько сообщений (example), которые кажутся очень похожими на то, что я пытаюсь выполнить, но они, похоже, требуют доступа к объекту Model, который я не уверен, что могу получить. Все, что мне действительно доступно для меня, это данные, которые находятся в выражении лямбда.

Прошу прощения за стену с текстом; Я попытался разбить его как можно лучше. Спасибо заранее за любые предложения!

ответ

0

Конечно, после ввода всего этого я обнаружил простое решение: передайте модель из представления в качестве параметра вспомогательной функции.

Смежные вопросы