Создание шаблонов Razor с пользовательским интерфейсом SiteEdit 2012 на Tridion 2011

Это касается Razor Templating с SDL Tridion 2011 SP1.

Чтобы включить 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>
   }
}
}

person Tejas    schedule 29.08.2012    source источник


Ответы (3)


Не могли бы вы попробовать так

    @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">
person Priyank Gupta    schedule 29.08.2012
comment
Это не работает, со строкой кода '‹tcdl:ComponentField name=Fields.footer_links[@i].outer_image›' она решается хорошо, но проблема возникает позже, т.е. '‹tcdl:ComponentField name=Fields.footer_links[@ i].sub_nav[@j].image›' даже в этом случае в выводе, когда я проверяю, я вижу ‹tcdl:ComponentField name=Fields.footer_links[0].sub_nav[0].image› ‹tcdl:ComponentField name= Fields.footer_links[0].sub_nav[1].image›‹tcdl:ComponentField name=Fields.footer_links[0].sub_nav[2].image› ‹tcdl:ComponentField name=Fields.footer_links[1].sub_nav[0 ].image› и т.д.. но все равно ошибка сохраняется - person Tejas; 29.08.2012

Я предполагаю, что у вас возникли проблемы с созданием тега tcdl?

Чтобы решить эту проблему, вы можете создать вспомогательный метод, который генерирует тег для вас:

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

В этом методе расширения вы можете легко вернуть отформатированную строку с тегом и атрибутами.

person Arjen Stobbe    schedule 05.09.2012

Это долгое время, поэтому не уверен, что вы используете, но вы, безусловно, можете использовать встроенную функцию медиатора бритвы для того же, что и 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)

Спасибо..

person vikas kumar    schedule 28.01.2013