我似乎无法获得我在内容中设置的“ 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* }
}
我从这些项目中没有任何价值.....尽管这些方法似乎都适用于我正在查看的其他示例,但不确定调用复选框字段的正确方法。
答案 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);
}
因此,在仔细考虑了你们所说的内容之后,我想出了一个更简单的解决方案,该解决方案非常适合我的需求。我非常感谢所有见解!