我知道这两个字段在Sitecore中只包含单个项目,但Droplinks存储项目的ID和Droplists存储项目的显示名称。
在编码部分,当我们通过自定义项生成器类获取Droplist的值时,它会给出ListItems。但正如我上面提到的,Droplists也包含单个项目。那么有什么区别,为什么自定义项生成器类会在Droplists的情况下提供列表项?这是自定义项目生成器中的错误吗?
两个领域的核心差异是什么?
答案 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>