6

我正在尝试使用RazorGenerator作为电子邮件模板引擎。我想用数据建立一个模型,组装正确的部分视图集,并返回我可以通过电子邮件发送的 HTML。
编辑:除了这个工作流程之外,任何解决方案都需要可编辑为 .cshtml 文件,并且能够编译成 dll。由于各种原因,部署 cshtml 文件本身是不切实际的——如果我们不能将所有剃刀视图嵌入到单个文件中,那么我们就不能使用该建议。因此 RazorGenerator。

到目前为止,我已经完成了它的每个部分,除了部分。当我尝试在模板文件中使用 @Html.Partial() 时,我得到:The name 'Html' does not exist in the current context.

基于这个答案,我知道@Html默认情况下这不是 Razor 的一部分,并且有很多关于如何HtmlHelper在控制器中创建 a 的答案。但是,我需要在模板中创建一个模板,该模板没有ControllerContext我需要遵循这些示例的模板。

我也尝试过使用@Include,但 RazorGenerator 模板似乎不支持它。 编辑:我还尝试创建一个新类,它继承TemplateBase<>并复制了 的所有功能RazorTemplateBase,但我得到NullReferenceException了 s 就@Include行了。

所以,我的主要问题是:有没有更好的方法将另一个 Razor 文件(带模型)包含到我的文件中?

其次,如果没有更好的方法,我怎样才能创建 HtmlHelper?


编辑赏金:重申一下,我在可接受的答案中需要的四件事是:

  1. 使用标准编辑器编辑文件的能力.cshtml(没有“将其存储为字符串”等)
  2. 将所有内容编译成单个 dll 的能力,该 dll 可以使用我们当前的构建系统进行部署(我们无法部署大量单独的 .cshtml)
  3. 从另一个引用一个 .cshtml 文件并传递模型的能力 - 等效于@Includes@Html.Partial(如果它们工作,它们中的任何一个都是完全可以接受的)
  4. 通过电子邮件发送结果和附件的能力。(如果结果是字符串或可转换为字符串,我已经有这方面的代码。)

我目前可以得到其中三个工作的大多数组合,但我不能一次得到所有四个。我愿意接受新的库,替换 RazorGenerator,或者丢弃我已有的任何部分,只要结果按需要工作。

4

2 回答 2

1

只是一个想法,但是为什么你不能设置其他页面并在你的控制器代码中打开一个 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;
}
于 2012-10-25T19:01:23.163 回答