Sitecore的GlassMapper MVC添加标准字段建模

问题描述:

我需要在一个特定的模式我的项目的排列顺序。Sitecore的GlassMapper MVC添加标准字段建模

我已经尝试过这样的,但没有运气:

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

任何想法,我怎么能包括在我的模型标准字段?

如果这是不可能的,其实我有在这种情况下一个清单的工作,从GlassMapper的自动映射不按字母顺序返回。

这里是清单字段的定义:

IEnumerable<Guid> Filter_Tags_To_Shows {get; set;} 

而像前面提到的,按字母顺序返回列表中,但我没有改变排序之后,因为缺少中将sortOrder领域。

在此先感谢。

+0

什么问题你上面的代码有?玻璃是否根本不映射该字段,还是映射该字段但具有不正确的值?你是否尝试将字段类型更改为int而不是字符串? – DougCouto

+0

是int返回0,字符串返回null。所以我认为没有完成映射。但是该项目有一个排序顺序值。 – Bgl86

+0

您可以尝试将您的字段移动到名为Appearance的类,并使用SitecoreType装饰器和外观类的TemplateId装饰该类,该字段实际来自哪里?只是一个考验。也许在你的Glass版本中,你需要在你的类所代表的模板上存在该字段(我不知道这是否是任何Glass版本的要求)。 – DougCouto

Filter_Tags_To_Shows属性返回的Guid S的,我相信一个列表,你那么做的事情得到日e从Sitecore链接的项目。这不是最有效的方式和玻璃,可以指定它他们的将自动映射链接的项目类型。

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字段,该字段允许您选择标签并根据需要对其进行重新排序。玻璃应按照您设定的顺序返回它们。

此属性

IEnumerable<Guid> Filter_Tags_To_Shows {get; set;} 

会给你的ID的列表,你在清单字段中选择的项目。为了得到实际项目的排序顺序,你需要这些ID转换成对象:

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

假设SomeClassTypeSortOrder的场,你应该然后能够访问该字段为每个对象在tagsToShow,做这样的事情:

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

谢谢DoughCouto。就像前面提到的,我将SortOrder字段添加到SomeClassType,但值为0,int为null,字符串为null。不知何故,GlassMapper不会自动映射这个。也许我会将它们转换为真正的Sitecore项目,然后我有sortorder字段。 – Bgl86

+0

不知何故,这现在工作,谢谢你DoughCoto! – Bgl86

清单和多重表存储作为Sitecore的数据库原始文本和顺序将根据数据源项序列进行更新,你可以试试下面的示例。

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

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