【问题标题】:How to obtain field values from a sitecore droplist used as a predefined list如何从用作预定义列表的站点核心下拉列表中获取字段值
【发布时间】:2016-02-10 09:43:59
【问题描述】:

在我的模板中,我有一个 Droplist 字段类型,它映射到一个 Sitecore 文件夹,其中包含 Droplist 的值,在本例中为 Colours。这样编辑者就不能打错字或发明不在预定义列表中的颜色。

因此,该颜色基于我称为 TAGS 的模板,该模板具有单个字段类型“颜色”,在这里我使用该模板创建一系列项目来为样本列表创建颜色。

当我访问主模板时,我可以看到 Droplist 中的颜色值,因此它可以正常工作,因为我可以访问这些字段值:

tileValues.Attributes["class"] += " tile-" + Item.Fields["Tile Colour"].Value.ToLower();

但是我已经意识到它不是使用模板的字段值,而是我调用该项目的名称。所以它只是一个快乐的错误,它达到了我想要的结果。

但是,我将如何在最终代码中获取该项目的实际字段值。我的场景中会有多语言编辑器,因此我们可以将标签命名为 rouge、blanc 等,这是编辑器在 Droplist 中选择时会看到的,但我们需要字段的颜色值仍然显示红色或白色等

我试过了:

Item.Fields["Tile Colour"].Item.Fields["Colour"].Value

但尽管 API 提示暗示其有效,但它还是失败了。

我希望这是有道理的,有人可以帮助我获取实际的字段值而不是项目名称。

【问题讨论】:

  • 你可以使用droplink代替droplist

标签: sitecore sitecore7.2


【解决方案1】:

正如Sitecore Climber 所写,不要使用Droplist 字段类型 - 它仅存储项目名称,您无法在后面的代码中获取项目本身。

使用 Droplink 字段类型 - 它存储项目的 ID。

然后就可以拿到物品了:

Item colourItem = Sitecore.Context.Database.GetItem(Item["Tile Colour"]);
if (colourItem != null)
{
    string colour = colourItem["Colour"];
|

【讨论】:

  • 再次感谢 Marek - 我已将字段类型换成 droplink 并重置项目上的值 - 使用上面的代码我收到错误 - 异常详细信息:System.NullReferenceException:对象引用未设置为一个对象的实例。关于线串 color = colourItem["Colour"];颜色已设置并发布在 droplink 指向的文件夹中的模板上。
  • 颜色单品自己发布了吗?
  • 如果你使用了我的代码,你不会得到异常——有一个空检查;)你需要调试并检查Item["Tile Colour"]的值是什么(它应该是一个guid),以及具有该 guid 的项目是否在您的网络数据库中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多