2012-12-27 50 views
0

我在Sitecore中有一個項目,其中包含一個內容部分,它是一個核對清單。此清單包含我已輸入到Sitecore中的多個Active Directory組的名稱。從Sitecore中的內容項目獲取每個CheckList項目的布爾值

當物品的負荷,我通過所有的複選框是在清單試圖循環,是否選擇它。

在上一篇文章的幫助下,我可以使用下面的代碼獲得每個複選框旁邊列出的名稱(您也可以看到我嘗試使用的註釋掉的代碼,以獲取他的複選框。):

Dim ADCheckList As Sitecore.Data.Fields.MultilistField = Sitecore.Context.Item.Fields("ADGroupAccess") 

    If ADCheckList IsNot Nothing Then 
     Dim i As Integer = 0 
     For i = 0 To ADCheckList.Count - 1 
      If IsInGroup(ADCheckList.GetItems(i).Fields("name").Value.ToString) Then 
       Response.Write("User in group. Now let's see if the group is checked.") 
      ''' Trying to see if checkbox is checked or not. 
      ''' Dim isChecked = DirectCast(ADCheckList.GetItems(i).Fields("name").Section, Boolean) 
      End If 
     Next 
    End IF 

如何獲取複選框的布爾值?

回答

2

場型只存儲您所選擇的項目的ID(如管道分隔列表),它不保存的可能性整個列表。

如果您看Template該項目是從您創建的,您將看到該字段的datasource。這將是一個項目的路徑,即/sitecore/content/home/myfolderofthings這個項目的孩子將成爲你在checklist中看到的選項。

例如,您可以遍歷數據源位置中的項目,獲取它們的item.ID屬性並查看是否ADCheckList.Items.Contains(item.ID)(或類似的東西)獲取布爾值。

+0

沒有多少運氣找到價值。我硬編碼了商品ID以嘗試獲取價值。 '昏暗MyItem1作爲Sitecore.Data.Items.Item = Sitecore.Context.Database.GetItem( 「522B9849-8C91-47AD-A158-4C2985A66F23」)''MyItem1.Items( 「ADGroupAccess」)' – crjunk

1

Stephen的答案正確地指出checklist字段僅存儲所選ID的管道分隔列表,您可以通過查看內容編輯器中的原始值或Sitecore Rocks來查看該列表。

我已經包含有方法來得到一個清單,以及只檢索選擇項目的方法所示的所有物品的清單一些示例代碼。我希望這有幫助。

using System; 
using System.Collections.Generic; 

using Sitecore.Data.Fields; 
using Sitecore.Data.Items; 

namespace Cms.Website.layouts 
{ 
    public partial class CheckList_SO : System.Web.UI.UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       var contextItem = Sitecore.Context.Item; 
       const string checkListFieldName = "List"; 

       SelectedItems.DataSource = contextItem.SelectedItemsInChecklist(checkListFieldName); 
       SelectedItems.DataBind(); 

       FullItemList.DataSource = contextItem.AllItemsInChecklist(checkListFieldName); 
       FullItemList.DataBind(); 
      } 
     } 
    } 

    public static class ItemExtensions 
    { 
     private static readonly Item[] EmptyItemArray = new Item[] { }; 

     public static IEnumerable<Item> AllItemsInChecklist(this Item item, string checkListFieldName) 
     { 
      var fieldItem = item.Template.GetField(checkListFieldName); 
      if (fieldItem != null) 
      { 
       var listSource = fieldItem.Source; 
       if (!string.IsNullOrEmpty(listSource)) 
       { 
        var sourceRoot = Sitecore.Context.Database.GetItem(listSource); 
        if (sourceRoot != null) 
        { 
         return sourceRoot.Children.ToArray(); 
        } 
       } 
      } 

      return EmptyItemArray; 
     } 

     public static IEnumerable<Item> SelectedItemsInChecklist(this Item item, string checkListFieldName) 
     { 
      MultilistField checklist = item.Fields[checkListFieldName]; 
      return checklist != null ? checklist.GetItems() : EmptyItemArray; 
     } 
    } 
} 
相關問題