我正在尝试使用RazorGenerator作为电子邮件模板引擎。我想拿一个模型与数据,组装正确的部分视图集,并返回HTML,我可以电子邮件出去。
编辑:除了这个工作流之外,任何解决方案都需要作为一个.cshtml文件进行编辑,并且能够编译成一个动态链接库。由于各种原因,部署cshtml文件本身是不实际的--如果我们不能将所有的剃须刀视图嵌入到一个文件中,那么我们就不能使用这个建议。因此,RazorGenerator。
到目前为止,我已经算出了它的每一个部分,除了部分。当我尝试在模板文件中使用@Html.Partial()时,我得到:The name 'Html' does not exist in the current context。
基于这个答案,我知道默认情况下@Html不是Razor的一部分,关于如何在控制器中创建HtmlHelper有很多答案。但是,我需要在模板中创建一个,它没有我需要遵循这些示例的ControllerContext。
我也尝试使用@Include,但是RazorGenerator模板似乎不支持这一点。编辑:我也尝试创建一个新类,它继承了TemplateBase<>并复制了RazorTemplateBase的所有功能,但是我在@Include行上得到了NullReferenceException。
因此,我的主要问题是:是否有更好的方法将另一个Razor文件(带有模型)包含到我的文件中?
其次,如果没有更好的方法,我如何创建HtmlHelper?
赏金的编辑:只是想重申一下,在一个可接受的答案中,我需要四件事:
.cshtml文件的能力(没有“将其存储为字符串”之类的功能)@Includes或@Html.Partial (如果它们工作的话,这两个模型都是完全可以接受的)。目前,我可以得到这三个工作的大多数组合,但我不能同时得到所有四个。我对新的库开放,可以替换RazorGenerator,或者丢弃我已经拥有的任何部分,只要结果能够根据需要工作。
发布于 2012-10-25 19:01:23
只是一个想法,但为什么不能设置其他页面,在Controller中打开一个HTTPWebRequest / WebClient,在那里发送所需的数据,将html/text全部从该视图中删除,合并多个调用,然后将所有字符串发送出去。
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-27 05:25:27
这是你想要的吗?
http://www.brightmix.com/blog/how-to-renderpartial-to-string-in-asp-net-mvc/
https://stackoverflow.com/questions/13035427
复制相似问题