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: просто повторю, четыре вещи, которые мне нужны в приемлемом ответе:
- редактировать
.cshtml
файлы со стандартным редактором (нет "сохранить его как строку" или такой) - возможность компилировать все в одну dll, которая может быть развернута с помощью нашей текущей системы сборки (мы не можем разверните много отдельных .cshtml по х)
- способность сослаться одно .cshtml файл из другого, и передать модель-эквивалент
@Includes
или@Html.Partial
(любой из которых вполне приемлемы, если они работают) - возможность отправить результат по электронной почте, с вложениями. (У меня уже есть код для этого, если результатом является строка или конвертируется в одну.)
в настоящее время я могу получить большинство комбинаций из трех из них, но я не могу получить все четыре однажды. Я открыт для новых библиотек, заменяя 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;
}