RazorGenerator, шаблоны и @Html

Я пытаюсь использовать RazorGenerator как движок шаблонов электронной почты. Я хочу взять модель с данными, собрать правильный набор частичных представлений и вернуть HTML, который я могу отправить по электронной почте.
Edit: в дополнение к этому рабочему процессу любое решение должно быть редактируемым как a .файл cshtml и можно скомпилировать в dll. По разным причинам нецелесообразно развертывать сами файлы cshtml-если мы не можем встроить все наши razor просматривает один файл, тогда мы не можем использовать это предложение. Следовательно, RazorGenerator.

до сих пор я проработал каждую его часть, за исключением частичных. Когда я пытаюсь использовать @Html.Partial () в файле шаблона я получаю: The name 'Html' does not exist in the current context.

на основе ответ, Я знаю, что @Html по умолчанию не является частью Razor, и есть много ответов о том, как создать HtmlHelper в контроллере. Однако мне нужно создать один в шаблоне, который нет ControllerContext что мне нужно следовать этим примерам.

Я также пытался использовать @Include, но шаблон RazorGenerator, похоже, не поддерживает это. Edit: я также попытался создать новый класс, который наследуется от TemplateBase<> и скопировал все функциональные возможности RazorTemplateBase, но я получаю NullReferenceExceptionна @Include линии.

Итак, мой основной вопрос: есть ли лучший способ включить другой файл бритвы (с моделью) в мой файл?

во-вторых, если нет лучшего способа,как я могу создать HtmlHelper?


редактировать для bounty: просто повторю, четыре вещи, которые мне нужны в приемлемом ответе:

  1. редактировать .cshtml файлы со стандартным редактором (нет "сохранить его как строку" или такой)
  2. возможность компилировать все в одну dll, которая может быть развернута с помощью нашей текущей системы сборки (мы не можем разверните много отдельных .cshtml по х)
  3. способность сослаться одно .cshtml файл из другого, и передать модель-эквивалент @Includes или @Html.Partial (любой из которых вполне приемлемы, если они работают)
  4. возможность отправить результат по электронной почте, с вложениями. (У меня уже есть код для этого, если результатом является строка или конвертируется в одну.)

в настоящее время я могу получить большинство комбинаций из трех из них, но я не могу получить все четыре однажды. Я открыт для новых библиотек, заменяя RazorGenerator или выбрасывая любую часть того, что у меня уже есть, до тех пор, пока результат работает по мере необходимости.

2 ответов


просто мысль, но почему вы не могли настроить другие страницы и в коде контроллера открыть HTTPWebRequest / WebClient отправить необходимые вам данные, получить весь html/текст из этого представления, объединить несколько вызовов вместе, а затем отправить по электронной почте всю эту строку.

public ActionResult SomeAction() {
  // call other section logic using HttpWebRequest or WebClient
  // /controller/emailsection/{vars}/......
  // Get the string out of the request add it to ViewData["xxx"]
  // rinse and repeat for other sections

}

public ActionResult EmailSection() {
  //put section logic here

  Response.ContentType = "text/html"; // "text/plain"
  Response.Write("Some HttpWebResponse");
  return null;
}