Sitecore GlassMapper MVC 向模型添加标准字段
Sitecore GlassMapper MVC add standard fields to model
我需要我的商品在特定型号中的排序顺序。
我试过这样但是没有成功:
[SitecoreField("__Sortorder")]
public string SortOrder { get; set; }
知道如何在我的模型中包含标准字段吗?
如果这不可能,实际上我在那种情况下使用清单,GlassMapper 的 AutoMapping 按字母顺序 return 它。
清单字段的定义如下:
IEnumerable<Guid> Filter_Tags_To_Shows {get; set;}
如前所述,该列表是按字母顺序 return 编辑的,但由于缺少 sortOrder 字段,我没有更改排序顺序。
提前致谢。
这个属性
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);
您的 Filter_Tags_To_Shows
属性 正在 return 生成一个 Guid
的列表,我认为您正在做一些事情以从 Sitecore 获取链接的项目。这不是最有效的方式,Glass 允许您指定链接的项目类型,它将自动映射。
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
字段,这将允许您 select 标签并根据需要重新排序。 Glass 应该 return 它们按照您当时设置的顺序排列。
Checklist 和 Multilist 以原始文本形式存储在 Sitecore 数据库中,序列将根据数据源项目序列进行更新,您可以尝试下面的示例。
Sitecore.Data.Fields.MultilistField multilistField = item.Fields["FieldName"];
foreach (var child in multilistField.GetItems)
{
// It should provide in short order
}
我需要我的商品在特定型号中的排序顺序。
我试过这样但是没有成功:
[SitecoreField("__Sortorder")]
public string SortOrder { get; set; }
知道如何在我的模型中包含标准字段吗?
如果这不可能,实际上我在那种情况下使用清单,GlassMapper 的 AutoMapping 按字母顺序 return 它。
清单字段的定义如下:
IEnumerable<Guid> Filter_Tags_To_Shows {get; set;}
如前所述,该列表是按字母顺序 return 编辑的,但由于缺少 sortOrder 字段,我没有更改排序顺序。
提前致谢。
这个属性
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);
您的 Filter_Tags_To_Shows
属性 正在 return 生成一个 Guid
的列表,我认为您正在做一些事情以从 Sitecore 获取链接的项目。这不是最有效的方式,Glass 允许您指定链接的项目类型,它将自动映射。
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
字段,这将允许您 select 标签并根据需要重新排序。 Glass 应该 return 它们按照您当时设置的顺序排列。
Checklist 和 Multilist 以原始文本形式存储在 Sitecore 数据库中,序列将根据数据源项目序列进行更新,您可以尝试下面的示例。
Sitecore.Data.Fields.MultilistField multilistField = item.Fields["FieldName"];
foreach (var child in multilistField.GetItems)
{
// It should provide in short order
}