Sitecore: How to access same field name in different sections

别来无恙 提交于 2019-12-03 12:13:39

You can't.

And frankly I don't know of any supported way to do it from .NET either.

This, straight out of the Data Definition Reference, section 2.1.1

2.1.1 Data Template Fields

A data template field defines the user interface control and other properties that influence how the field behaves in the Content Editor and Page Editor. For more information about fields, see Chapter 4, The Template Field.

Note When defining field names, ensure that they are unique even between field sections. Both XSLT and .NET code use field names alone, without reference to sections, to extract content from fields.

I found a way around this in .Net on a project I was working on. One of the templates that the client had set up had "Buckets" which had different field sections, but the fields within were the same between buckets. I used LINQ to group the fields by Section name, then dealt with each grouping of fields.

var sections = currentItem.Fields.GroupBy(field => field.Section);
foreach (var section in sections)
{
    if (section.Key.StartsWith("Bucket"))
    {
        buckets.Add(new Bucket(section)); //I made a bucket item, 
                                          //and passed each IGrouping<Field> to it
    }
}
Seth Larson
item.Fields.Where(field => field.Section.ToUpper() == "META DATA" && 
                           field.DisplayName.ToUpper() == "TITLE").First().Value;
Alexey Rusakov

You can reference fields by their IDs:

C#:

string value = item["{00000000-0000-0000-000000000000}"]

or

Field field = item.Fields["{00000000-0000-0000-000000000000}"]

I haven't tried this, but I think it'll work in XSLT as well:

<sc:text field="{00000000-0000-0000-000000000000}" />

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!