Sitecore GlassMapper MVC为模型添加标准字段

时间:2017-08-30 15:20:24

标签: sitecore sitecore8 glass-mapper

我需要特定模型中项目的排序顺序。

我试过这样但没有运气:

[SitecoreField("__Sortorder")]
public string SortOrder { get; set; }

我知道如何在模型中包含标准字段吗?

如果无法做到这一点,实际上我正在使用Checklist,那么GlassMapper的AutoMapping会按字母顺序返回。

以下是核对表字段的定义:

IEnumerable<Guid> Filter_Tags_To_Shows  {get; set;}

如前所述,列表按字母顺序返回,但由于缺少sortOrder字段,因此我无需进行更改。

先谢谢。

3 个答案:

答案 0 :(得分:1)

此属性

IEnumerable<Guid> Filter_Tags_To_Shows  {get; set;}

将为您提供在核对表字段中选择的项目的ID列表。要获取实际项目的排序顺序,您需要将这些ID转换为对象:

var tagsToShow = Filter_Tags_To_Shows.Select(i => SitecoreContext.GetItem<SomeClassType>(i));

假设 SomeClassType 具有 SortOrder 字段,那么您应该能够访问 tagsToShow 中每个对象的该字段,并执行以下操作:

var sortedTagsToShow = tagsToShow.OrderBy(i => i.Sortorder);

答案 1 :(得分:1)

您的Filter_Tags_To_Shows属性正在返回Guid的列表,我认为,您正在做一些事情来从Sitecore获取链接的项目。这不是最有效的方法,Glass允许您指定链接的Item类型,它将自动化。

IEnumerable<FilterTagClass> Filter_Tags_To_Shows  {get; set;}

假设FilterTagClass的排序顺序与您的问题相同:

[SitecoreType(TemplateId={GUID})]
public class FilterTagClass : GlassBase 
{
    [SitecoreField("__Sortorder")]
    public virtual int SortOrder { get; set; }
}

您可以使用Linq进行排序:

@foreach (var tag in Filter_Tags_To_Shows.OrderBy(i => i.SortOrder))
{
    // do stuff
}

这是来自@DougCouto的答案的重新哈希,但请注意,如果您正确设置属性和映射,则无需将ID转换为对象。

作为使用Checklist字段的替代方法,您可以使用Multilist字段,该字段允许您选择标记并根据需要重新排序。 Glass应按照您设置的顺序返回它们。

答案 2 :(得分:0)

清单和多列表在Sitecore数据库中以原始文本形式存储,序列将根据数据源项目顺序进行更新。您可以尝试以下示例。

Sitecore.Data.Fields.MultilistField multilistField = item.Fields["FieldName"];

foreach (var child in multilistField.GetItems)
{
    // It should provide in short order
}