问题标签 [razorengine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2177 浏览

layout - RazorEngine - 使用布局和 Html.Raw

我想将以下 Razor 模板与RazorEngine一起使用:

当我调用它时,我得到 2 个错误 - 一个抱怨它无法处理布局,另一个抱怨它不知道如何处理 Html 帮助程序。

这里还有其他问题和答案表明这在 v3 中是可能的,我正在使用 NuGet 上的当前包 - v3.0.8 - 但目前尚不清楚这是如何完成的。目前我这样称呼它:

其他答案建议首先使用 Razor.SetBaseTemplate,它不会出现在当前源代码或 git 上的 3.0 分支中。查看代码我看到引用布局和部分的代码,但布局代码似乎依赖于按名称解析模板,而我正在尝试做的甚至不需要解析模板 - 我只需要它来应对布局 = null。该代码还包括一个 MvcTemplateBase,它似乎在 Web 项目中提供了一个 HtmlHelper - 但它是该项目中的唯一类,并且在 Web 或核心项目中的任何地方都没有引用。

这个类似的问题: RazorEngine issues with @Html

只是指向主页的链接,说明您可以在那里找到更多信息 - 主页只是描述项目的简短句子。

那么,如何使用 RazorEngine v3.0 解析上述 Razor 视图?

0 投票
1 回答
2374 浏览

.net - 使用 RazorEngine 迭代模型

我正在使用 ElasticObject (http://elasticobject.codeplex.com/) 创建动态对象,我将其提供给 RazorEngine 以进行模板替换。

ElasticObject 正在转换为动态对象的 XML 的结构如下:

我想弄清楚如何获取 Contact.UserFirstName 等数据

我可以使用以下方法访问 Book 节点的属性:

我只是不确定如何使用 RazorEngine 遍历模型。

我尝试了以下方法:

您可以提供的任何帮助将不胜感激。

0 投票
4 回答
19311 浏览

c# - RazorEngine 布局

我正在使用 Razor 引擎https://github.com/Antaris/RazorEngine来解析我的电子邮件模板的正文。是否可以定义布局并包含其他 .cshtml 文件?例如常见的页眉和页脚。

0 投票
3 回答
1970 浏览

templating - RazorEngine 是否需要安装 MVC3?

我正在开发一个使用 MVC2 的 Web 项目。我决定尝试使用 RazorEngine来做一些电子邮件模板。当我使用 MVC2 项目进行原型设计时,这似乎工作得很好,所以我认为 RazorEngine 可以很好地用于我的电子邮件模板解决方案。我当时忘记的是我实际上在本地开发机器上安装了 MVC3。

在预测试服务器上部署项目后,当应用程序尝试使用 RazorEngine 执行任何操作时,我在日志中收到以下错误:

无法加载文件或程序集“System.Web.Razor,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。

该系统找不到指定的文件。

文件名:'System.Web.Razor,版本=1.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35'

在 RazorEngine.Compilation.DefaultCompilerServiceFactory.CreateCompilerService(语言)

在 RazorEngine.Templating.TemplateService.CreateTemplateType(字符串 razorTemplate,类型 modelType)

在 RazorEngine.Templating.TemplateService.CreateTemplate[T](StringrazorTemplate,T 模型)

在 RazorEngine.Templating.TemplateService.Parse[T](字符串 razorTemplate,T 模型)

在 RazorEngine.Razor.Parse[T](字符串 razorTemplate,T 模型)

在 System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,Tret](CallSite 站点,T0 arg0,T1 arg1,T2 arg2)

在 Persistence.Utility.RazorEngineHelper.Parse(String templateName, Object model) in ...

它找不到“System.Web.Razor”的事实意味着部署的服务器上不存在此 DLL。我能想到的部署服务器和我的本地开发机器之间的唯一区别是部署服务器没有安装 MVC3,但我可能弄错了,因为部署服务器不是我通常控制的东西,因此我没有很多关于它的信息。它旨在托管此特定应用程序,因此之前已将此应用程序部署到此服务器。这是我第一次使用 RazorEngine 作为依赖项进行部署。

0 投票
1 回答
2826 浏览

c# - 模板中的 RazorEngine 扩展方法

我正在使用 Razor 引擎:https ://github.com/Antaris/RazorEngine 。

我正在动态创建模型。我试图在模板中包含一个扩展方法,但它可以识别扩展类。我收到以下错误消息“ ‘字符串’不包含‘ToUpperFirstLetter’的定义

模型创建

模板

扩展类

剃刀解析

编辑

我还想在 Dynamic ExpandoObject 上创建一个扩展方法。查看模型中的值是否存在。我收到以下错误消息“ System.Dynamic.ExpandoObject'不包含'HasValue'的定义

扩展类

扩展使用

编辑两个

以下工作并进入扩展方法

动态模型仍然抛出异常 - RuntimeBinderException: 'System.Dynamic.ExpandoObject' 不包含 'HasValue' 的定义

0 投票
1 回答
283 浏览

.net - 在 Mono v2.10 上使用 RazorEngine v3

有没有办法在 Mono v2.10 上使用 RazorEngine v3?

尝试解析模板时出现以下错误。

0 投票
4 回答
3941 浏览

razorengine - RazorEngine 内存使用情况

我创建了一个 Windows 服务来构建和发送电子邮件。我正在使用Razor 引擎来解析电子邮件模板。我正在使用动态 ExpandoObject 来创建模型。

我的问题是当每封电子邮件被创建和发送时,内存在增加,但它从未被释放。我已经使用 Ants Memory profiler 分析了该服务(我以前没有使用过),但它显示了以下结果:

使用剃须刀引擎

使用 Razor.Parse(text,model) 解析 200 封电子邮件

第 1 代:12.9kb

第 2 代:15.88mb

大对象堆:290.9kb

分配给 .NET 的未使用内存:3.375mb

非托管:69.51mb

内存碎片总数:197

没有剃须刀引擎

返回 200 封电子邮件未解析的文本。

第 1 代:13.87kb

第 2 代:3.798mb

大对象堆:95.58kb

分配给 .NET 的未使用内存:4.583mb

非托管:44.58mb

内存碎片总数:7

Razor 最大的第 2 代实例是:

System.Reflection.Emit __FixUpData[] - 2,447,640 个活动字节,3,138 个实例

有谁知道为什么这些对象没有被释放并且第 2 代正在增长?每次我想解析模板时,有没有办法拥有一个新的 RazorEngine 实例,当它完成时,它不会被引用,而是会进入 GC。

每次解析模板时,我都尝试创建模板服务的新实例,但这并没有什么不同

0 投票
3 回答
3118 浏览

c# - 带有 RazorEngine 和布局的 TemplateCompilationError

我一直在尝试在我的一个小项目中使用 RazorEngine,但是当我尝试使用模板布局时无法克服这个错误。

无法编译模板。“object”不包含“Description”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“Description”(您是否缺少 using 指令或程序集引用?)

我的设置: 我有一个这样的模板布局:

然后是一个看起来像这样的页面模板:

这是我用来尝试解决这个问题的测试 Main 函数:

知道我错过了什么吗?

更新:如果我用带有描述属性的 POCO 替换动态模型对象,它会起作用。我还尝试了 Parse 的类型化版本

动态的

, ExpandoObject,IDictionary<string, object>但它们都有相同的错误。

更新: 我在 Github 上发现了这个项目,它似乎以某种方式工作: https ://github.com/mikoskinen/graze/blob/master/src/core/Graze.cs#L174

0 投票
3 回答
12406 浏览

c# - RazorEngine 取消缓存已编译的模板

目前,我正在使用 RazorEngine v2.1 作为发送模板电子邮件(数千封)的后台进程的一部分。为了加快速度,模板以它们的 md5 总和作为名称进行编译。这使得当模板更改时,它会被重新编译,并且所有使用该模板的电子邮件都能够使用相同的编译模板。我在列表中跟踪已编译模板的名称,以便知道何时再次调用 compile(并做一些其他事情)。

问题:我突然想到,经过很长时间和大量模板修改后,所有这些缓存的编译模板可能仍会在内存中,因为它们看起来像是存储在dynamic. 对于这个可能一次运行数月而无需重新启动的特定进程,如果所有先前版本的模板仍然存在,这可能构成严重的内存泄漏。

问题:有没有办法取消缓存旧模板,使它们不再在dynamic?

例如,如果我能够自己保留已编译的模板对象,并在我想使用它们时将它们传递给 RazorEngine,我可以决定何时将它们扔掉,这样就可以消除内存泄漏。但是,如果 RazorEngine 已经有办法解决这个问题,那么了解这一点也会很方便,因为我在互联网上找不到很多关于这个特定问题的参考资料。关于为什么应该使用编译模板来减少内存使用的原因有很多,但是我很难找到关于在长期应用程序中积累大量未使用的编译模板的任何信息。

编辑:我刚刚阅读了一些关于缓存如何工作的内容,如果使用不同的模板传入相同的名称,它将重新缓存它并丢弃旧的。然而,这里的问题仍然存在,因为随着时间的推移,电子邮件将被添加和删除,并且随着时间的推移,所有已删除的旧电子邮件仍然存在(即使它不会存储模板的每个版本的副本)。

0 投票
1 回答
1321 浏览

razor - RazorEngine 3.2.0:在 .cshtml 文件中找不到 Razor 命名空间

我在类库项目中使用RazorEngine 3.2.0 。

我通过以下对以下 SO 问题的回答解决了一些与类库相关的问题:Razor intellisense error: Feature 'extension method' cannot be used because it is not part of the ISO-2 C# language specification

问题

我尝试使用@inherits关键字。如果我只写view-class的完整限定名,intellisense 就可以了。如果我尝试从中继承,RazorEngine.Templating.TemplateBase<T>似乎整个RazorEngine-Assemlby 都没有解决

模板如下所示:

运行时它可以工作——只是智能感知失败了。

问题

智能感知识别 RazorEngine-Assembly 需要什么?