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

Rob*_*nik 6 c# sitecore razor sitecore8

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

  • 我正在使用Sitecore 8.
  • Sitecore字段"标题号"是单行文本字段

这是我正在尝试的:

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

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

  • numberField 正确设置为Sitecore字段
  • numberField.HasValue 报道 false
  • 但是 numberField.Value(正确地)返回字段的值
  • 由于未能触发if块,phoneNumber因此永远不会设置:

断点显示变量值的屏幕截图

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

Mar*_*lak 6

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

HasValue 只有在项目本身上设置了值时,属性才返回true。

这是HasValueproperty 的实现:

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

public string GetValue(bool allowStandardValue, bool allowDefaultValue)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

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