这是关于使用SDL Tridion 2011 SP1的Razor Templating。
要启用SiteEdit UI 2012,我们将在CT中引入标签。
我想询问是否可以为驻留在组件的嵌套嵌入式字段中的字段制作tcdl:ComponentField
标记。
这里我们将带有“footer_links”的Component作为多值嵌入字段,并且每个“footer_links”项目都有一个多值嵌入字段“sub_nav” 并希望阅读sub_nav.image以使其可编辑。
但是,当我执行以下操作时,启用内容编辑内容TBB会抛出错误
错误: 你调用的对象是空的。 在Tridion.SiteEdit.Templating.EnableInlineEditingUI.FindItemFieldXPath(String [] parts,Int32 currentIndex,ItemFields fields)
任何人都有任何想法?如果我们可以实现这个?如果是,那么下面的代码有什么问题吗?
我们也可以读取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>
}
}
}
答案 0 :(得分: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">
答案 1 :(得分:1)
我假设您在生成tcdl标签时遇到问题?
要解决此问题,您可以创建一个帮助方法,为您生成标记:
public static MvcHtmlString SiteEditComponentField(this HtmlHelper helper, string id)
在此扩展方法中,您可以轻松返回带有标记和属性的格式化字符串。
答案 2 :(得分: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)
谢谢..