Razor templating with SiteEdit UI 2012 onTridion 2011



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

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

我想问一下,是否可以为驻留在组件的嵌套嵌入式字段中的字段制作tcdl:ComponentField标记。

这里我们有一个组件,"footer_links"作为多值嵌入字段,并且每个"footer-links"项都有一个多值嵌入域"sub_nav"并且想要读取sub_nav.image以使其套件可编辑。

但当我执行以下操作时,启用内容的内联编辑TBB抛出以下错误

错误:对象引用未设置为对象的实例。在Tridion.SiteEdit.Templateing.EnableInlineEditingUI.FindItemFieldXPath(String[]parts,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>
   }
}
}

你能这样尝试吗

    @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">

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

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

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

在这个扩展方法中,您可以很容易地返回带有标记和属性的格式化字符串。

这是一个很长的时间,所以不确定您在使用什么,但您肯定可以使用类似于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)

谢谢。。

最新更新