【问题标题】:Get Boolean Value of Each CheckList Items from Content Item in Sitecore从 Sitecore 中的内容项获取每个清单项的布尔值
【发布时间】:2012-12-29 21:41:43
【问题描述】:

我在 Sitecore 中有一个项目,其中包含一个内容部分,它是一个清单。此清单包含我已输入到 Sitecore 的多个 Active Directory 组的名称。

当项目加载时,我试图循环检查清单中的所有复选框以查看它是否被选中。

在上一篇文章的帮助下,我能够使用以下代码获取每个复选框旁边列出的名称(您还可以查看我尝试使用的注释掉的代码以获取 he 的值复选框。):

    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

如何获取复选框的布尔值?

【问题讨论】:

    标签: asp.net sitecore sitecore6


    【解决方案1】:

    字段类型仅存储您选择的项目的 ID(作为管道分隔列表),它不存储整个可能性列表。

    如果您查看创建项目的Template,您将看到该字段的datasource。这将是一个项目的路径,即/sitecore/content/home/myfolderofthings,该项目的子项将是您在checklist 中看到的选项。

    例如,您可以遍历数据源位置中的项目,获取它们的 item.ID 属性并查看 ADCheckList.Items.Contains(item.ID)(或类似的东西)是否获取布尔值。

    【讨论】:

    • 没有太多运气找到价值。我已经对项目 ID 进行了硬编码以尝试获取该值。 Dim MyItem1 As Sitecore.Data.Items.Item = Sitecore.Context.Database.GetItem("522B9849-8C91-47AD-A158-4C2985A66F23")MyItem1.Items("ADGroupAccess")
    【解决方案2】:

    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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 2017-04-20
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多