0

チェックリストであるコンテンツ セクションを含む項目が Sitecore にあります。このチェックリストには、Sitecore に入力した複数の Active Directory グループの名前が含まれています。

アイテムが読み込まれると、チェックリストにあるすべてのチェック ボックスをループして、選択されているかどうかを確認しようとしています。

以前の投稿の助けを借りて、次のコードを使用して、各チェックボックスの横にリストされている名前を取得することができました (チェックボックスの値を取得するために使用しようとしたコメントアウトされたコードも参照できます)。 :

    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

チェックボックスのブール値を取得するにはどうすればよいですか?

4

2 に答える 2

2

field-type は、選択した項目の ID のみを (パイプで区切られたリストとして) 保存します。可能性のリスト全体は保存しません。

Templateアイテムの作成元である を見るとdatasource、フィールドの が表示されます。これはアイテムへのパスになります。つまり/sitecore/content/home/myfolderofthings、このアイテムの子は に表示されるオプションになりますchecklist

たとえば、データソースの場所にあるアイテムをループして、それらのitem.IDプロパティADCheckList.Items.Contains(item.ID)を取得し、ブール値を取得するかどうか (または同様のもの) を確認できます。

于 2012-12-27T17:12:19.247 に答える
1

checklistStephen の回答は、フィールドには選択された 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;
        }
    }
}
于 2012-12-29T13:41:43.870 に答える