Sitecore中的Droplink和Droplist在自定义项目生成器工具之间有什么区别?

时间:2014-08-07 09:32:18

标签: sitecore

我知道这两个字段在Sitecore中只包含单个项目,但Droplinks存储项目的ID和Droplists存储项目的显示名称。

在编码部分,当我们通过自定义项生成器类获取Droplist的值时,它会给出ListItems。但正如我上面提到的,Droplists也包含单个项目。那么有什么区别,为什么自定义项生成器类会在Droplists的情况下提供列表项?这是自定义项目生成器中的错误吗?

两个领域的核心差异是什么?

3 个答案:

答案 0 :(得分:7)

您对Sitecore如何存储这两种不同字段类型的值的理解是正确的。我不知道您正在使用的代码或模块的详细信息,但这里有一些示例代码片段,解释了如何完成此操作。

<强> Droplist

在字段中存储所选项目的名称。 请注意,Sitecore内容编辑器中的下拉列表将显示项目的显示名称,但仍在内部使用项目名称。 如果要检索所选项目,可以按如下方式执行:

Item sourceItem = //code here to get the item selected as the *source* of the template field
Item item = Sitecore.Context.Item;
string selectedName = item["YourDroplistFieldName"];
Item selectedItem = sourceItem.Children[selectedName];

<强> Droplink

在字段中存储所选项目的 ID 。 要检索此项目,请使用以下命令:

Item item = Sitecore.Context.Item;
LinkField field = item.Fields["YourDroplinkField"];
Item selectedItem = field.TargetItem;

注意,要了解Sitecore如何在内部存储字段,您可以选择“查看”工具栏并选中“原始值”复选框(在内容编辑器中)。

通常我会在下拉列表上使用 droplink 字段,除非您只需要使用所选项目的名称。

答案 1 :(得分:2)

正如您所注意到的那样 - Droplink存储商品ID,而Droplist仅存储商品的字符串表示(商品名称)。使用Droplist时无法检索实际项目。即使用Droplink时,您可以选择检索TargetItem。此外,当重命名项目并预览原始值时 - 您可以看到,如果您使用的是Droplist - 项目选择不再可用,但值仍然存在。

答案 2 :(得分:2)

这是自定义项生成器的补丁配置CustomItem.config

中的错误

在该文件中,它将 DropList 字段类型映射到多列表包装器,为您提供ListItems属性:

<FieldMapping fieldType="Droplist">CustomMultiListField</FieldMapping>

您应该更改配置的这一部分以撤回文本,即:

<FieldMapping fieldType="Droplist">CustomTextField</FieldMapping>