【问题标题】:Using Razor Templates to produce a .aspx page使用 Razor 模板生成 .aspx 页面
【发布时间】:2012-06-07 00:52:50
【问题描述】:

我正在尝试使用 Razor 模板生成 .aspx 页面作为输出。我没有运气在文档中查找如何执行此操作。页面和命名空间声明破坏了模板:

<%@ Page Language="C#" Title="@Page.Metadata.browser_title" %>
<%@ Import Namespace="System.Xml" %>

这些是导致此错误的原因:

TemplateCompileException:CS1501:方法“Write”没有重载需要 0 个参数第 27 行第 1 列:Write();

我认为这是因为使用 C# 语法的 Razor 模板使两者发生冲突,因为上面的声明使用“@”。有没有办法让它们一起工作,以便 Razor 模板可以在模板运行后在渲染产品中使用 C# 生成输出?上面的示例还显示了“Title”的值需要如何从模板中呈现出来。

【问题讨论】:

  • 你到底为什么要这么做?
  • 由于 Tridion 创建者的 Razor Mediator 似乎并不在 SO 中闲逛,我建议在他的博客上问他:codedweapon.com
  • 它首先通过一个名为 Tridion 的内容管理系统,页面上的内容由非开发人员输入。我以前一直在使用 DWT,但我正在研究使用 Razor 的概念证明,而不是在布局模板中提供更灵活的选项。 Razor/C# 操作模板代码,但生产服务器上的页面也有 C#,因为该站点基于 .net 并使用母版页、用户控件等。

标签: c# razor tridion


【解决方案1】:

&lt;% 中的 @s 是无效的 Razor 语法。
你需要通过写&lt;%@@来逃避它们。

【讨论】:

  • 非常感谢,成功了!我在猜测解决它的语法时尝试了 @
【解决方案2】:

您可以编写一个 C# TBB 在所有 Razormediator 模板之后添加标签,或者如果您可以在默认完成操作之后添加标签(如果您正在使用一个)则更好。

快速而肮脏的示例代码...

  Item OutputItem = package.GetByName(Package.OutputName);
  string OutputText = OutputItem.GetAsString();

  // Page tag declaration..
  string pagePretags = @"<<TWO LINES OF DECLARATIONs..>>"
  string FinalOutputText = pagePretags + OutputText ;

  OutputItem.SetAsString(FinalOutputText);

希望这会有所帮助..

【讨论】:

    【解决方案3】:

    如果您喜欢 Razor,也许您应该查看 DD4T (http://code.google.com/p/dynamic-delivery-4-tridion/)。它允许您使用带有 Razor 视图的 ASP.Net MVC 构建网站。

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 2018-11-26
      • 2020-12-30
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多