Sitecore的Field.HasValue返回false,即使有值?

时间:2016-02-26 09:10:34

标签: c# razor sitecore sitecore8

我试图在Razor语法中使用Sitecore的Field.HasValue属性来测试特定字段,但无论我尝试什么,该字段似乎总是错误的。

  • 我正在使用Sitecore 8.
  • Sitecore字段,“标题编号”是单行文字字段

以下是我正在尝试的内容:

@{
    var phoneNumber = "";
    var numberField = Model.Item.Fields["Header Number"];
    if (numberField != null && numberField.HasValue)
    {
        phoneNumber = numberField.Value;
    }
}

正如您在下面的屏幕截图中看到的那样:

  • numberField正确设置为Sitecore字段
  • numberField.HasValue正在报告false
  • 然而 numberField.Value(正确)返回字段的值
  • 由于未能触发if阻止,因此永远不会设置phoneNumber

Screenshot of Breakpoint showing variable values

这是一个错误吗?我是否错误地使用HasValue或者我是否应该使用另一种Sitecore方法来安全地测试字段是否有值?

1 个答案:

答案 0 :(得分:5)

此字段的最可能值来自标准值项(已继承)。

HasValue属性仅在项目本身设置值时才返回true。

以下是HasValue属性的实现:

public bool HasValue
{
  get
  {
    return this.GetValue(false, false) != null;
  }
}

public string GetValue(bool allowStandardValue, bool allowDefaultValue)
{
  ...
}

您可以检查ContainsStandardValue属性以检查该值是否来自标准值。