我需要特定模型中项目的排序顺序。
我试过这样但没有运气:
[SitecoreField("__Sortorder")]
public string SortOrder { get; set; }
我知道如何在模型中包含标准字段吗?
如果无法做到这一点,实际上我正在使用Checklist,那么GlassMapper的AutoMapping会按字母顺序返回。
以下是核对表字段的定义:
IEnumerable<Guid> Filter_Tags_To_Shows {get; set;}
如前所述,列表按字母顺序返回,但由于缺少sortOrder字段,因此我无需进行更改。
先谢谢。
答案 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
}