Sitecore的GlassMapper MVC添加标准字段建模
问题描述:
我需要在一个特定的模式我的项目的排列顺序。Sitecore的GlassMapper MVC添加标准字段建模
我已经尝试过这样的,但没有运气:
[SitecoreField("__Sortorder")]
public string SortOrder { get; set; }
任何想法,我怎么能包括在我的模型标准字段?
如果这是不可能的,其实我有在这种情况下一个清单的工作,从GlassMapper的自动映射不按字母顺序返回。
这里是清单字段的定义:
IEnumerable<Guid> Filter_Tags_To_Shows {get; set;}
而像前面提到的,按字母顺序返回列表中,但我没有改变排序之后,因为缺少中将sortOrder领域。
在此先感谢。
答
你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));
假设SomeClassType有SortOrder的场,你应该然后能够访问该字段为每个对象在tagsToShow,做这样的事情:
var sortedTagsToShow = tagsToShow.OrderBy(i => i.Sortorder);
答
清单和多重表存储作为Sitecore的数据库原始文本和顺序将根据数据源项序列进行更新,你可以试试下面的示例。
Sitecore.Data.Fields.MultilistField multilistField = item.Fields["FieldName"];
foreach (var child in multilistField.GetItems)
{
// It should provide in short order
}
什么问题你上面的代码有?玻璃是否根本不映射该字段,还是映射该字段但具有不正确的值?你是否尝试将字段类型更改为int而不是字符串? – DougCouto
是int返回0,字符串返回null。所以我认为没有完成映射。但是该项目有一个排序顺序值。 – Bgl86
您可以尝试将您的字段移动到名为Appearance的类,并使用SitecoreType装饰器和外观类的TemplateId装饰该类,该字段实际来自哪里?只是一个考验。也许在你的Glass版本中,你需要在你的类所代表的模板上存在该字段(我不知道这是否是任何Glass版本的要求)。 – DougCouto