2016-02-26 10 views
6

Próbuję użyć właściwości Sitecore Field.HasValue w składni Razor, aby przetestować konkretne pole, ale niezależnie od tego, co próbuję, pole zawsze wydaje się być fałszywe.Pole Sitecore Field.HasValue zwraca fałsz, nawet jeśli istnieje wartość?

  • Używam Sitecore 8.
  • Pole Sitecore, "Number Header" jest polem Tekst jednowierszowy

Oto co usiłuję:

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

Jak widać na poniższym zrzucie ekranu:

  • numberField jest prawidłowo ustawiony na Sitecore polowego
  • numberField.HasValue donosi false
  • JednaknumberField.Value jest (słusznie), zwracając wartość pola
  • powodu braku pożaru bloku if, phoneNumber jest nigdy set:

Screenshot of Breakpoint showing variable values

Czy to błąd? Czy używam niepoprawnie HasValue lub czy istnieje inna metoda Sitecore, której powinienem używać, aby bezpiecznie przetestować, czy pola mają wartość?

+0

Nie możesz sprawdzić '! String.IsNullOrEmpty (numberField)' w swoim bloku 'if'? – jammykam

+0

@jammykam - prawdopodobnie tym razem mogę to zobaczyć, ponieważ jest to ciąg znaków, ale bardziej martwię się bardziej złożonymi typami danych obsługiwanymi przez Sitecore i używam '.HasValue' w innym miejscu. – Robotnik

Odpowiedz

4

Prawdopodobnie wartość tego pola pochodzi z pozycji Wartości standardowe (jest dziedziczona).

HasValue Właściwość zwraca tylko wartość true, gdy wartość jest ustawiona dla samego elementu.

Oto realizacja HasValue nieruchomości:

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

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

Można sprawdzić ContainsStandardValue właściwość, aby sprawdzić, czy wartość pochodzi od standardowych wartości.

+0

It * does * pochodzą ze standardowych wartości ... Uff, dzięki, myślałem, że tracę rozum :). Czy istnieje preferowana metoda sprawdzania, czy pole ma jakąkolwiek wartość, nawet jeśli jest to wartość standardowa? – Robotnik

+1

@Robotnik Myślę, że właściwość 'ContainsStandardValue' powinna załatwić sprawę. –

+0

@MarekMusielak - Jesteś legendą dzięki :). Przyjmę, gdy system pozwoli mi (byłeś tak szybki, że wciąż znajduje się w ciągu 15 minut haha). – Robotnik

Powiązane problemy