【发布时间】:2012-10-23 16:48:28
【问题描述】:
我正在尝试使用RazorGenerator 作为电子邮件模板引擎。我想用数据建立一个模型,组装正确的部分视图集,并返回我可以通过电子邮件发送的 HTML。
编辑:除了这个工作流程之外,任何解决方案都需要可以作为 .cshtml 文件进行编辑,并且可以编译成 dll。由于各种原因,部署 cshtml 文件本身是不切实际的——如果我们不能将所有剃刀视图嵌入到单个文件中,那么我们就不能使用该建议。因此是 RazorGenerator。
到目前为止,我已经完成了它的每个部分,除了部分。当我尝试在模板文件中使用 @Html.Partial() 时,我得到:The name 'Html' does not exist in the current context。
基于this answer,我知道@Html 默认不是Razor 的一部分,关于如何在控制器中创建HtmlHelper 有很多答案。但是,我需要在模板中创建一个模板,该模板没有我需要遵循这些示例的ControllerContext。
我也尝试过使用@Include,但 RazorGenerator 模板似乎不支持它。 编辑:我还尝试创建一个继承自TemplateBase<> 的新类并复制RazorTemplateBase 的所有功能,但我在@Include 行上得到NullReferenceExceptions。
所以,我的主要问题是:有没有更好的方法将另一个 Razor 文件(带有模型)包含到我的文件中?
其次,如果没有更好的方法,如何创建 HtmlHelper?
为赏金编辑:重申一下,我在可接受的答案中需要的四件事是:
- 能够使用标准编辑器编辑
.cshtml文件(没有“将其存储为字符串”等) - 能够将所有内容编译成单个 dll,可以使用我们当前的构建系统进行部署(我们无法部署大量单独的 .cshtml)
- 能够从另一个 .cshtml 文件引用一个 .cshtml 文件,并传递一个模型 - 相当于
@Includes或@Html.Partial(如果它们都可以正常工作,则两者都可以接受) - 通过电子邮件发送结果和附件的能力。 (如果结果是字符串或可转换为字符串,我已经有这方面的代码。)
我目前可以得到其中三个的大多数组合,但我不能同时得到所有四个。我愿意接受新的库、替换 RazorGenerator 或丢弃我已有的任何部分,只要结果按需要工作即可。
【问题讨论】:
-
部分是否在同一个视图文件夹中?我从来没有使用过
Html.Partial() -
我问只是因为使用该方法您有两个选项来指定部分...
Html.Partial("_PartialInSameFolder")或Html.Partial("~/Views/Folder/PartialInAnotherFolder.cshtml")您可能知道这是我能想到的唯一会导致你提到的错误。 -
@Jared - 他不是在生成视图的上下文中执行此操作。他正在尝试使用来自后端类的 Razor 引擎创建 HTML 电子邮件。 '@Html' 在这些情况下不起作用。当我们做同样的事情时,我可以收集到,'@Html' 需要一个 HtmlHelper 参数,其中包含视图的 ViewContext。由于这是在后端-> 没有 ViewContext 这是解决此问题的问题的一部分。我希望 Bobson 能得到一些好的答复,因为我们放弃了尝试在 Razor 模板中使用任何“@Html”项目(想使用“@Html.Raw”)
-
@Tommy gotcha 错过了那部分。
-
@Tommy - 没错。我会很高兴没有
@Html和工作的@Include,但工作的@Html会更好。
标签: c# asp.net-mvc-3 template-engine razorgenerator