禁用Sitecore glass mapper中特定属性的版本检查

时间:2014-02-03 15:42:25

标签: c# sitecore glass-mapper sitecore7.1

我将SItecore 7.1Glass.Mapper.Sc 3.1.7.26一起使用。我有以下模型,共享Service Id字段:

[SitecoreType]
public class ServiceMapping
{
    [SitecoreField(FieldName = "Service Id")]
    public virtual string ServiceId { get; set; }
}

我有以下模型引用Droptree字段上的服务映射(也是共享):

[SitecoreType]
public class OnlineService
{
    [SitecoreInfo(SitecoreInfoType.DisplayName)]
    public virtual string DisplayName { get; set; }

    [SitecoreField(FieldName = "Service")]
    public virtual ServiceMapping ServiceMapping { get; set; }
}

当我加载OnlineService的实例时,由于DisplayName,它必须依赖于语言。我们假设我有OnlineService提供德语和英语,我的ServiceMapping只提供英语,然后我在null对象请求ServiceMapping德语页面。

是否可以为ServiceMapping.ServiceId属性提供一个不应检查现有语言版本的设置?我知道有VersionCountDisabler(),但我不能使用它,因为我需要OnlineService类来检查语言版本。

1 个答案:

答案 0 :(得分:4)

嗯,这是一个棘手的问题,下面的代码没有经过测试(我正在考虑解决方案时写这个),但是应该指出你的写作方向。

public class MyCrazyType : SitecoreFieldTypeMapper
{
    public override object GetFieldValue(string fieldValue, Mapper.Sc.Configuration.SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
    {
        using (new VersionCountDisabler())
        {
            return base.GetFieldValue(fieldValue, config, context);
        }
    }

    public override bool CanHandle(Mapper.Configuration.AbstractPropertyConfiguration configuration, Context context)
    {
        //this will mean this handle only works for this type
        return configuration.PropertyInfo.PropertyType == typeof (ServiceMapping);
    }

}

使用此Glass会将空项目映射到目标类型。

您需要使用Glass注册处理程序,请参阅本教程: http://glass.lu/docs/tutorial/sitecore/tutorial19/tutorial19.html