Доступ к значению флажка элемента в массиве - Sitecore - PullRequest
0 голосов
/ 09 июля 2019

Я не могу получить значение поля флажка «NoIndexNoFollow», которое я установил в своем контенте.

Я попробовал два из следующих примеров кода ниже.

1) Я получаю ЛОЖЬ для каждого элемента, даже если я отмечаю флажок в редакторе контента.

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 голосов
/ 11 июля 2019

В своем комментарии вы написали, что Model.SiteSearchResults - это список Sitecore 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>
    }
}
0 голосов
/ 11 июля 2019
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);
}

Так что, подумав больше о том, что вы, ребята, сказали, я нашел немного более простое решение, которое идеально подходит для того, что мне нужно. Я действительно ценю все идеи!

0 голосов
/ 10 июля 2019

Вы можете использовать методы расширений, чтобы сделать метод многократно используемым, но главное, что нужно отойти от этих решений, - это использование служебной функции из 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);
}
...