我正在尝试使用 RazorGenerator作为电子邮件模板引擎。我想用数据建立模型,组装正确的部分 View 集,然后返回我可以通过电子邮件发送的 HTML。
编辑:除此工作流程外,任何解决方案都需要作为 .cshtml 文件进行编辑,并且能够编译成 dll。由于各种原因,部署 cshtml 文件本身是不切实际的——如果我们不能将所有 razor View 嵌入到一个文件中,那么我们就不能使用该建议。因此,RazorGenerator。
到目前为止,我已经完成了它的每个部分,除了部分部分。当我尝试在模板文件中使用 @Html.Partial() 时,我得到:The name 'Html' does not exist in the current context
.
基于 this answer ,我知道 @Html
默认情况下不是 Razor 的一部分,关于如何创建 HtmlHelper
有很多答案。在 Controller 中。但是,我需要在没有 ControllerContext
的模板中创建一个我需要遵循这些示例。
我也试过使用@Include,但 RazorGenerator 模板似乎不支持它。 编辑:我还尝试创建一个继承自 TemplateBase<>
的新类并复制了 RazorTemplateBase
的所有功能, 但我得到 NullReferenceException
在 @Include
上行。
所以,我的主要问题是:是否有更好的方法将另一个 Razor 文件(带有模型)包含到我的文件中?
其次,如果没有更好的方法,如何创建HtmlHelper?
赏金编辑:重申一下,我需要在可接受的答案中做的四件事是:
- 编辑能力
.cshtml
使用标准编辑器的文件(没有“将其存储为字符串”等) - 能够将所有内容编译成单个 dll,可以使用我们当前的构建系统进行部署(我们无法部署大量单独的 .cshtml)
- 从另一个文件引用一个 .cshtml 文件并传递模型的能力 - 相当于
@Includes
或@Html.Partial
(如果它们有效,两者都是完全可以接受的) - 能够通过电子邮件发送带有附件的结果。 (如果结果是字符串或可转换为字符串,我已经有了代码。)
我目前可以得到其中三个的大多数组合,但我不能同时得到所有四个。我对新库、替换 RazorGenerator 或丢弃我已有的任何部分持开放态度,只要结果按需要工作即可。
最佳答案
只是一个想法,但为什么你不能设置其他页面并在你的 Controller 代码中打开一个 HTTPWebRequest/WebClient 将你需要的数据发送到那里,从该 View 中获取所有 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;
}
关于c# - RazorGenerator、模板和@Html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13035427/