【问题标题】:Razor templating with SiteEdit UI 2012 onTridion 2011使用 SiteEdit UI 2012 onTridion 2011 进行 Razor 模板
【发布时间】:2012-08-23 22:44:15
【问题描述】:

这是关于使用 SDL Tridion 2011 SP1 的 Razor 模板。

为了启用 SiteEdit UI 2012,我们在 CT 中引入了标签。

我想问是否可以为位于组件的嵌套嵌入字段内的字段制作tcdl:ComponentField标签。

这里我们有一个“footer_links”作为多值嵌入字段的组件,并且每个“footer_links”项都有一个多值嵌入字段“sub_nav” 并想阅读 sub_nav.image 以使其套件可编辑。

但是当我执行以下操作时,为内容启用内联编辑 TBB 会引发以下错误

错误: 你调用的对象是空的。 在 Tridion.SiteEdit.Templating.EnableInlineEditingUI.FindItemFieldXPath(String[] 部分,Int32 currentIndex,ItemFields 字段)

有人知道吗?如果我们能实现这个?如果是,那么下面的代码有什么问题?

我们也可以同样读取 ComponentLink 中的字段吗? 帮助将不胜感激。

@for (int i=0; i<Fields.footer_links.Count; i++) {
/* "outer_image" is compLink and it workds fine */
   @if(Fields.footer_links[i].outer_image != null) {
   <tcdl:ComponentField name="Fields.footer_links[@i].outer_image">
    <img src="@Fields.footer_links[i].outer_image.ID"/>
  </tcdl:ComponentField>              
  }

  /* "sub_nav" is Mutlivalued Embedded field and "image" is field inside it */

   @for (int j=0; j<Fields.footer_links[i].sub_nav.Count; j++) {
   <li>
   @if(Fields.footer_links[i].sub_nav[j].image != null) {
   <tcdl:ComponentField name="Fields.footer_links[@i].sub_nav[@j].image">
      <img src="@Fields.footer_links[i].sub_nav[j].image.ID" />
    </tcdl:ComponentField>
   }
}
}

【问题讨论】:

    标签: razor tridion tridion-2011 siteedit


    【解决方案1】:

    你可以这样尝试吗

        @foreach(dynamic com in Fields.footer_links) {
    /* "outer_image" is compLink and it workds fine */
       @if(com.outer_image != null) {
       <tcdl:ComponentField name="com.Fields.outer_image">
        <img src="@com.Fields.outer_image.ID"/>
      </tcdl:ComponentField>              
      }
    
      /* "sub_nav" is Mutlivalued Embedded field and "image" is field inside it */
    
       @foreach (dynamic subCom in com.sub_nav) {
       <li>
       @if(subCom.image != null) {
       <tcdl:ComponentField name="subCom.Fields.image">
          <img src="@subCom.Fields.image.ID" />
        </tcdl:ComponentField>
       }
    }
    }
    

    因为,下面的行 @i 似乎没有像 Int 类型那样转换值

     <tcdl:ComponentField name="Fields.footer_links[@i].outer_image">
    

    【讨论】:

    • 这行不通,代码行 '' 得到了很好的解决,但问题是后一种情况,即 '' 即使在这种情况下,当我检查输出时我看到 等等..但仍然存在错误
    【解决方案2】:

    我假设您在生成 tcdl 标记时遇到问题?

    要解决这个问题,您可以创建一个帮助方法来为您生成标签:

    public static MvcHtmlString SiteEditComponentField(this HtmlHelper helper, string id)
    

    在此扩展方法中,您可以轻松返回带有标签和属性的格式化字符串。

    【讨论】:

      【解决方案3】:

      很长一段时间,所以不确定你在使用什么,但你当然可以使用类似于 dwt 的 razor mediator 内置函数

      String RenderComponentField(string fieldExpression, int fieldIndex)
      String RenderComponentField(string fieldExpression, int fieldIndex, bool renderTcdlTagOnError)
      String RenderComponentField(string fieldExpression, int fieldIndex, string value)
      String RenderComponentField(string fieldExpression, int fieldIndex, string value, bool renderTcdlTagOnError)
      String RenderComponentField(string fieldExpression, int fieldIndex, bool htmlEncodeResult, bool resolveHtmlAsRTFContent)
      String RenderComponentField(string fieldExpression, int fieldIndex, bool htmlEncodeResult, bool resolveHtmlAsRTFContent, renderTcdlTagOnError)
      

      谢谢..

      【讨论】:

        猜你喜欢
        • 2012-12-18
        • 2012-06-24
        • 2012-11-25
        • 2013-01-19
        • 2012-07-22
        • 1970-01-01
        • 2018-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多