2016-02-26 73 views
6

我試圖在Razor語法中使用Sitecore的Field.HasValue屬性來測試特定的字段,但無論我嘗試什麼,該字段總是似乎是錯誤的。Sitecore的Field.HasValue返回false,即使有值時也是如此?

  • 我使用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方法我應該用來安全地測試字段是否有值?

+0

你不能在你的if區塊中檢查'!String.IsNullOrEmpty(numberField)'嗎? – jammykam

+0

@jammykam - 我可能這次看到它是一個String,但我更擔心Sitecore支持的更復雜的數據類型,並且我在其他地方使用'.HasValue'。 – Robotnik

回答

4

該字段的大部分值可能來自標準值項目(是繼承的)。

HasValue屬性只在項目本身設置值時才返回true。

這裏是HasValue屬性的實現:

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

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

您可以檢查ContainsStandardValue屬性來檢查值來自標準值。

+0

它*確實來自標準值...哎,謝謝你,以爲我失去了我的想法:)。是否有一種首選的方法來測試字段是否具有任何價值,即使它是標準值? – Robotnik

+1

@Robotnik我認爲'ContainsStandardValue'屬性應該做的伎倆。 –

+0

@MarekMusielak - 你是一個傳奇謝謝:)。一旦系統讓我接受(你很快它仍然在15分鐘窗口哈哈) – Robotnik

相關問題