4

这是关于使用 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>
   }
}
}
4

3 回答 3

2

你可以这样尝试吗

    @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">
于 2012-08-29T15:11:02.040 回答
1

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

为了解决这个问题,您可以创建一个为您生成标签的辅助方法:

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

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

于 2012-09-05T14:06:31.280 回答
1

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

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)

谢谢..

于 2013-01-28T21:14:14.473 回答