2016-02-26 12 views
6

Tôi đang cố gắng sử dụng thuộc tính Field.HasValue của Sitecore trong cú pháp Razor để kiểm tra một trường cụ thể, nhưng không có vấn đề gì tôi cố gắng, trường luôn có vẻ là sai.Fieldecas's Field.HasValue trở về sai, ngay cả khi có Giá trị?

  • Tôi đang sử dụng Sitecore 8.
  • Trường Sitecore, "Header Số" là một đơn-Line Text

Dưới đây là những gì tôi đang cố gắng:

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

Như bạn có thể thấy trong ảnh chụp màn hình bên dưới:

  • numberField đang được thiết lập một cách chính xác để một Sitecore Dòng
  • numberField.HasValue được báo cáo false
  • Tuy nhiênnumberField.Value là (chính xác) trả lại giá trị của trường
  • Vì sự thất bại để bắn các khối if, phoneNumber là không bao giờ được đặt:

Screenshot of Breakpoint showing variable values

Đây có phải là lỗi không? Tôi có đang sử dụng HasValue không chính xác hoặc có phương pháp Sitecore khác mà tôi nên sử dụng để kiểm tra an toàn nếu các trường có giá trị không?

+0

Bạn không thể kiểm tra '! String.IsNullOrEmpty (numberField)' trong khối 'if' của bạn? – jammykam

+0

@jammykam - Có lẽ lần này tôi có thể thấy nó là một String, nhưng tôi lo lắng hơn về các kiểu dữ liệu phức tạp hơn mà Sitecore hỗ trợ và tôi đang sử dụng '.HasValue' ở nơi khác. – Robotnik

Trả lời

4

Giá trị có lẽ nhất của trường này đến từ mục Giá trị chuẩn (được kế thừa).

HasValue thuộc tính chỉ trả về giá trị đúng khi giá trị được đặt trên chính mục đó.

Đây là việc thực hiện HasValue tài sản:

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

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

Bạn có thể kiểm tra ContainsStandardValue tài sản để kiểm tra nếu giá trị xuất phát từ giá trị tiêu chuẩn.

+0

Nó * không * đến từ các giá trị tiêu chuẩn ... cảm ơn vì điều đó, nghĩ rằng tôi đã mất trí :). Có phương pháp ưa thích nào để kiểm tra xem một trường có bất kỳ giá trị nào không, ngay cả khi nó là Giá trị Chuẩn? – Robotnik

+1

@Robotnik Tôi nghĩ rằng 'ContainsStandardValue' tài sản nên làm các trick. –

+0

@MarekMusielak - Bạn là một truyền thuyết cảm ơn :). Sẽ chấp nhận một khi hệ thống cho phép tôi (bạn đã quá nhanh đến mức nó vẫn nằm trong cửa sổ 15 phút haha) – Robotnik

Các vấn đề liên quan