2016-02-26 20 views
6

Sto tentando di utilizzare la proprietà Field.HasValue di Sitecore nella sintassi Razor per testare un campo particolare, ma non importa quello che provo, il campo sembra sempre falso.Campo di Sitecore.HasValue restituisce false, anche quando c'è un valore?

  • sto usando Sitecore 8.
  • Il campo Sitecore, "Intestazione Numero" è un campo di testo a riga singola

Ecco quello che sto cercando:

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

Come potete vedere nello screenshot qui sotto:

  • numberField è essere correttamente impostata su un Sitecore campo
  • numberField.HasValue sta riportando false
  • TuttavianumberField.Value è (correttamente) la restituzione del valore del campo
  • A causa del fallimento di sparare il blocco if, phoneNumber è mai messo:

Screenshot of Breakpoint showing variable values

Si tratta di un bug? Sto usando HasValue in modo errato o c'è un altro metodo Sitecore che dovrei usare per testare in sicurezza se i campi hanno un valore?

+0

Non riesci a controllare '! String.IsNullOrEmpty (numberField)' nel tuo blocco 'if'? – jammykam

+0

@jammykam - Probabilmente posso questa volta, visto che si tratta di una stringa, ma sono più preoccupato per i tipi di dati più complessi supportati da Sitecore e che sto usando '.HasValue' altrove. – Robotnik

risposta

4

Molto probabilmente il valore di questo campo proviene dall'elemento Valori standard (è ereditato).

HasValue proprietà restituisce solo true quando il valore è impostato sull'elemento stesso.

Qui è l'attuazione di HasValue proprietà:

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

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

È possibile controllare ContainsStandardValue proprietà per verificare se il valore deriva dai valori standard.

+0

Questo * fa * deriva dai valori standard ... beh, grazie per quello, pensavo di perdere la ragione :). Esiste un metodo preferito per verificare se un campo ha un valore qualsiasi, anche se si tratta di un valore standard? – Robotnik

+1

@Robotnik Penso che la proprietà 'ContainsStandardValue' dovrebbe fare il trucco. –

+0

@MarekMusielak - Sei una leggenda grazie :). Accetterà una volta che il sistema me lo consente (sei stato così veloce è ancora all'interno della finestra di 15 minuti haha) – Robotnik

Problemi correlati