访问数组中项目的复选框值-Sitecore

时间:2019-07-09 17:09:31

标签: html razor sitecore

我似乎无法获得我在内容中设置的“ NoIndexNoFollow”复选框字段的值。

我尝试了以下两个以下代码示例。

1)即使我在内容编辑器中选中了该框,我也对每一项都得出FALSE。

foreach (var item in Model.SiteSearchResults)
{
Sitecore.Data.Fields.CheckboxField checkboxField = Sitecore.Context.Item.Fields["NoIndexNoFollow"];
if (checkboxField.Checked)
{ *CODE*}
}

2)这里什么也没有填充。

foreach (var item in Model.SiteSearchResults)
{
var toindex = Sitecore.Context.Item.Fields["NoIndexNoFollow"].ToString();
if (toindex == "1")
{ *CODE* }
}

我从这些项目中没有任何价值.....尽管这些方法似乎都适用于我正在查看的其他示例,但不确定调用复选框字段的正确方法。

3 个答案:

答案 0 :(得分:0)

您可以使用扩展方法使该方法可重复使用,但是要摆脱这些解决方案的关键是利用Sitecore MainUtil.GetBool(checkboxField.Value,false); 中的实用程序功能。

using System;
using Sitecore;
using Sitecore.Data.Fields;
using Sitecore.Resources.Media;

namespace MyProject.Extensions
{
    public static class FieldExtensions
    {

        public static bool IsChecked(this Field checkboxField)
        {
            if (checkboxField == null)
            {
                throw new ArgumentNullException(nameof(checkboxField));
            }
            return MainUtil.GetBool(checkboxField.Value, false);
        }
    }

    public static class ItemExtensions
    {
        public static bool IsChecked(this Item item, ID fieldId)
        {
            var checkboxField = item.Fields[fieldId];
            if (checkboxField == null)
            {
                throw new ArgumentNullException(nameof(checkboxField));
            }
            return MainUtil.GetBool(checkboxField.Value, false);
        }
    }
}

MyRendering.cshtml-使用FieldExtensions

@using MyProject.Extensions
@model Sitecore.Mvc.Presentation.RenderingModel
@{

    var noIndexNoFollow = Model.Item.Fields["NoIndexNoFollow"].IsChecked();
}

MyRendering.cshtml-使用ItemExtensions

@using MyProject.Extensions
@using Sitecore.Mvc
@model Sitecore.Mvc.Presentation.RenderingModel
@{
    var noIndexNoFollow = Model.Item.IsChecked(Model.Item.Fields["NoIndexNoFollow"].ID);
}

答案 1 :(得分:0)

在您的评论中,您写道Model.SiteSearchResults是Sitecore ID的列表。

您需要先获取具有此ID的项目,然后使用MainUtil.GetBool()这样的方法检查字段的值,例如:

foreach (var id in Model.SiteSearchResults)
{
    if (Sitecore.MainUtil.GetBool(Sitecore.Context.Database.GetItem(id)["NoIndexNoFollow"], false))
    {
        <text>checked</text>
    }
    else
    {
        <text>not checked</text>
    }
}

答案 2 :(得分:0)

foreach (var item in Model.SiteSearchResults)
{ 
Database database = Sitecore.Context.Database;
Item myItem = database.GetItem(item.ItemId);
var fieldValue = myItem.Fields["NoIndexNoFollow"];
string noIndexValue = Convert.ToString(fieldValue);
}

因此,在仔细考虑了你们所说的内容之后,我想出了一个更简单的解决方案,该解决方案非常适合我的需求。我非常感谢所有见解!