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

什么';Sitecore Droplink和自定义项目生成器工具中的Droplist之间的区别是什么?,sitecore,Sitecore,我知道这两个字段在Sitecore中只包含单个项目,但Droplinks存储项目的ID,DropList存储项目的显示名称 在编码部分,当我们通过自定义项生成器类获得Droplist的值时,它会给出ListItems。但正如我上面提到的,DropList也包含单个项。那么,有什么区别呢?为什么自定义项生成器类会在滴列表的情况下提供列表项呢?这是自定义项目生成器中的错误吗 这两个字段的核心区别是什么?正如您所注意到的,Droplink存储项目ID,Droplist仅存储项目(项目名称)的字符串表示

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

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


这两个字段的核心区别是什么?

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

您对Sitecore如何存储这两种不同字段类型的值的理解是正确的。我不知道您正在使用的代码或模块的详细信息,但下面是一些示例代码片段,解释如何实现这一点

Droplist

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

Item sourceItem=//在此处编写代码,以获取选定为模板字段的*source*的项
Item Item=Sitecore.Context.Item;
string selectedName=项[“YourDroplistFieldName”];
Item selectedItem=sourceItem.Children[selectedName];
Droplink

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

Item Item=Sitecore.Context.Item;
LinkField=item.Fields[“yourdoplinkfield”];
Item selectedItem=field.TargetItem;
注意,要查看Sitecore如何在内部存储字段,可以选择“查看”工具栏并选中“原始值”复选框(在内容编辑器中)


通常,我几乎总是在投递列表上使用投递链接字段,除非您只需要使用所选项目的名称。

这是自定义项目生成器的修补程序配置中的一个错误,
CustomItem.config

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

<FieldMapping fieldType="Droplist">CustomMultiListField</FieldMapping>
CustomMultiListField
您应该更改配置的这一部分以回拉文本,这将是:

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

@Yogeshharma这是核心区别。当使用droplink时,您可以检索目标项目-而当使用droplist时,您没有办法这样做。是的,但是为什么我们使用droplist以及为什么Sitecore提供droplink,您是绝对正确的,但我知道您所说的所有这些,我期待一些不同,比如在这种情况下,我们只需要使用droplist而不需要使用droplink,我希望你能收到我的信point@YogeshSharma-您可以查看此博客以了解更多信息。基本上,我反对使用Droplist,但如果您对值背后的实际项目不感兴趣,您可能会使用它。已经这样做了,您是对的,您知道为什么在代码部分中,它提供了带有自定义项目生成器的多列表,但它只在SiteCore中存储单个项目还不错!实际上,不要使用lookup字段,因为它不指向GUID。使用CustomTextField,因为它指向项目名称。谢谢,我将尝试使用CustomTextField!抱歉,@Mark我没有试过我正忙着发布一些项目,我会在周末发布,然后告诉你