Tag: 模板引擎

模板引擎实现

我目前正在构建这个小模板引擎。 它需要一个包含参数模板的字符串,以及填写模板的“标签,值”字典。 在引擎中,我不知道模板中的标签和不会出现的标签。 我正在迭代(foreach)在dictionnary上,解析我放在字符串构建器中的字符串,并用模板替换相应的值。 这样做有效/方便吗? 我知道这里的主要缺点是每次完全为每个标签解析stringbuilder,这非常糟糕…… (我也在检查,但不包括在样本中,在我的模板不再包含任何标签的过程之后。它们都以相同的方式格式化:@@ tag @@) //Dictionary tagsValueCorrespondence; //string template; StringBuilder outputBuilder = new StringBuilder(template); foreach (string tag in tagsValueCorrespondence.Keys) { outputBuilder.Replace(tag, tagsValueCorrespondence[tag]); } template = outputBuilder.ToString(); 对策: @渣: string template = “Some @@foobar@@ text in a @@bar@@ template”; StringDictionary data = new StringDictionary(); data.Add(“foo”, “value1”); data.Add(“bar”, “value2”); data.Add(“foo2bar”, “value3”); 输出: “value2模板中的某些文本” […]

我可以运行ASPX并在不发出HTTP请求的情况下grep结果吗?

我怎样才能在没有URL和没有HTTP的情况下对一个简单的ASP.NET文件进行函数调用,并捕获它生成的字节流? 更多背景资料, 我需要一种模板可以在里面放一点逻辑,来渲染一些像文本文件一样的INI。 我放弃了从Java移植的库,并提出了使用ASP.NET作为模板引擎的解决方案。 (我不是用它来构建一个网站,甚至不是HTML。) 我编写了一个ASP.NET页面(没有WebForm,没有MVC),它接受XML POST,并根据一组简单但不太简单的规则生成一个长文本文件。 我从DB对象生成XML,提交到ASP页面,grep结果,它工作得很好。 但是,问题是我们想要用作WCF使用的库。 因此,我没有使用相对路径,我必须在配置中的某处存储ASP的URL,这是我不想要的。 它将托管在IIS服务器上,但不会从任何前端ASP调用(至少不是直接),并且永远不会从最终用户调用。 PS。 我原本是在为C#寻找一个简单的模板引擎,但它们太旧了,不再需要维护,文档很差,缺少集成的编辑器/调试器,太简单了,而且它们可能会说不同的语言。 PPS。 我也考虑过T4,但它在VS 2008中没有编辑器和调试器。

T4模板和运行时参数

我正在VS 2010中构建一个插件,我陷入了T4代。 现在我已经实现了(比如MSDN建议的)一个自定义T4主机来生成我的T4结果,并且我以这种方式使用它: const string content = @”c:\Simple.tt”; var engine = new Engine(); var host = new MyTemplateHost(); var result = engine.ProcessTemplate(File.ReadAllText(content), host); foreach (CompilerError error in host.Errors) { Console.WriteLine(error.ErrorText); } 这有效,直到我在模板中传递参数。 一旦我在.tt文件中创建了一个参数,主机就会说它不知道如何解决它。 我看到你可以使用TemplateSession来做到这一点,但我没弄明白如何将它传递给我的主机? 是否有更好的方法使用C#从.tt生成代码并在运行时传递参数? 也许我走错了路。

我可以从C#以编程方式使用T4吗?

我正在编写生成C#代码的软件。 主要是我使用StringTemplate和StringBuilder。 有没有办法直接从我的代码中使用T4模板?

RazorGenerator,模板和@Html

我正在尝试使用RazorGenerator作为电子邮件模板引擎。 我想用数据模型,组装正确的部分视图集,并返回我可以通过电子邮件发送的HTML。 编辑:除了这个工作流程,任何解决方案都需要编辑为.cshtml文件,并能够编译成一个DLL 。 由于各种原因,自行部署cshtml文件是不切实际的 – 如果我们无法将所有剃刀视图嵌入到单个文件中,那么我们就无法使用该建议。 因此RazorGenerator。 到目前为止,我已经计算出它的每个部分,除了部分。 当我尝试在模板文件中使用@ Html.Partial()时,我得到: The name ‘Html’ does not exist in the current context 。 基于这个答案 ,我知道默认情况下@Html不是Razor的一部分,关于如何在控制器中创建HtmlHelper有很多答案。 但是,我需要在模板中创建一个模板,该模板没有我需要遵循这些示例的ControllerContext 。 我也尝试过使用@Include,但是RazorGenerator模板似乎不支持。 编辑:我还尝试创建一个inheritance自TemplateBase的新类,并复制了RazorTemplateBase所有function,但我在@Include行上得到了NullReferenceException 。 所以,我的主要问题是:是否有更好的方法将另一个Razor文件(带模型)包含到我的文件中? 其次,如果没有更好的方法,我怎样才能创建HtmlHelper? 编辑赏金:重申一下,在可接受的答案中我需要的四件事是: 使用标准编辑器编辑.cshtml文件的能力(不“将其存储为字符串”等) 能够将所有内容编译成单个dll,可以使用我们当前的构建系统进行部署(我们无法部署大量单独的.cshtml) 能够从另一个引用一个.cshtml文件,并传递一个模型 – 相当于@Includes或@Html.Partial (如果它们工作的话,其中任何一个都是完全可以接受的) 使用附件通过电子邮件发送结果的function。 (如果结果是字符串或可以转换为一个字符串,我已经有了这个代码。) 我目前可以获得其中三种组合的大多数组合,但我不能同时获得所有四种组合。 我愿意接受新的库,取代RazorGenerator,或者抛弃我已有的任何部分,只要结果能够按需要运行。