我正在使用GlassMapper V3和Sitecore 7.2。与MVC。

Sitecore项数据通过GlappMapper管道自动映射,该模型不是很复杂。
通过部分类扩展了模型,使其子项也自动映射:

[SitecoreQuery("./*[@@templatename='Slider Element']", IsRelative = true)]
public virtual IEnumerable<Slider_Element> SliderElements { get;set; }


到目前为止,一切正常。但:

如果一个或多个子项没有当前上下文语言的版本,我还是希望收到。这对PageEditMode自动起作用,但对普通模式不起作用。但是,任何类型的语言回退都是没有用的,因为这种功能只能用于特定的属性。我需要的是这样的:

[SitecoreQuery("./*[@@templatename='Slider Element']", IsRelative = true, GetItemsHavingNoVersions = true)]
public virtual IEnumerable<Slider_Element> SliderElements { get;set; }


据我所知,GlassMapper可在服务器端进行自定义,但到目前为止,在我可以添加此类功能的地方找不到任何东西。

我还花了几个小时在网上搜索并发现了GlassMapper源代码。

SitecoreService类中有一个方法似乎可以完成部分逻辑工作,但我不确定100%:

public IEnumerable<T> Query<T>(string query, bool isLazy = false, bool inferType = false) where T : class
    {
        return CreateTypes( typeof(T), () => { return Database.SelectItems(query); }, isLazy, inferType) as IEnumerable<T>;
    }


预先非常感谢您的帮助!

最好的祝福,
汤玛士

最佳答案

您是否尝试过使用VersionCountDisabler

将调用代码包装在using语句中

using(new VersionCountDisabler()){

  var model =  sitecoreService.GetItem<MyModel>("/sitecore/content/home");

}


查看Glass网站以获取更多信息-http://www.glass.lu/Mapper/Sc/Documentation/VersionCountDisabler

或者您可以全局禁用检查

protected void Application_BeginRequest()
{
    Sitecore.Context.Items["Disable"] = new VersionCountDisabler();
}

关于c# - Sitecore GlassMapper尝试使用查询属性获取没有版本的项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32905017/

10-09 18:50