我将SItecore 7.1
与Glass.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
类来检查语言版本。
答案 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