2016-02-26 18 views
6

特定のフィールドをテストするためにSitecoreのField.HasValueプロパティをRazor構文で使用しようとしていますが、何を試してもフィールドは常にfalseと思われます。私はサイトコア8を使用してい値がある場合でも、SitecoreのField.HasValueがfalseを返しますか?

  • サイトコアフィールド、「ヘッダー数」は、ここで私がしようとしているものだ単一行のテキストフィールド

です:

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

下記のスクリーンショットでご覧いただけるとおり、

  • numberFieldが正常(正常)false
  • しかしnumberField.Valueが報告ためifブロックを発射する障害の分野
  • の値を返しているサイトコアフィールド
  • numberField.HasValueに設定されている、phoneNumberであります設定されたことがない:

Screenshot of Breakpoint showing variable values

これはバグですか? HasValueを間違って使用しているのですか、フィールドに値があるかどうかを安全にテストするために使用する別のSitecoreメソッドがありますか?

+0

あなたの 'if'ブロックで'!String.IsNullOrEmpty(numberField) 'をチェックできませんか? – jammykam

+0

@jammykam - これは文字列のように見えますが、Sitecoreがサポートするより複雑なデータ型と、他の場所で '.HasValue'を使用していることを心配しています。 – Robotnik

答えて

4

おそらくこのフィールドの値は、標準値項目(継承されています)からの値です。

HasValueプロパティは、項目自体に値が設定されている場合のみtrueを返します。

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

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

あなたは値が標準値から来ているかどうかを確認するためにContainsStandardValueプロパティを確認することができます。ここでは

HasValueプロパティの実装です。

+0

それは標準的な値から来ています...それのためのphew感謝、私は私の心を失っていたと思った:)。たとえそれが標準値であっても、フィールドが何らかの値を持っているかどうかをテストするための好ましい方法はありますか? – Robotnik

+1

@Robotnik私は 'ContainsStandardValue'プロパティがトリックを行うべきだと思います。 –

+0

@MarekMusielak - あなたは伝説の感謝です:)。システムが私にできるようになると受け入れます(あなたはとても速く、15分のウィンドウ内にいました。) – Robotnik

関連する問題