【发布时间】:2015-09-17 19:28:56
【问题描述】:
我不明白为什么 Glass Mapper 不能像 here 描述的那样以正确的方式投射对象 我有下一堂课
public class BC
{
[SitecoreId]
public virtual ID Id { get; set; }
}
public class WB : BC
{
[SitecoreField(FieldName = "P1")]
public virtual Glass.Mapper.Sc.Fields.Link P1 { get; set; }
}
[SitecoreType(TemplateId = "{XXX}", AutoMap = true, EnforceTemplate = SitecoreEnforceTemplate.Template)]
public class AAA : WB
{
public virtual string AAAP1 { get; set; }
public virtual DateTime AAAP2 { get; set; }
}
[SitecoreType(TemplateId = "{VVV}", AutoMap = true, EnforceTemplate = SitecoreEnforceTemplate.Template)]
public class BBB : WB
{
public virtual string BBBp1 { get; set; }
public virtual DateTime BBBp2 { get; set; }
}
[SitecoreType(TemplateId = "{YYY}", AutoMap = true)]
public class RazorRenderClass: BC
{
[SitecoreChildren(InferType = true)]
public virtual IEnumerable<WB> Children { get; set; }
[SitecoreChildren(InferType = true)]
public virtual IEnumerable<AAA> AAACh { get; set; }
[SitecoreChildren(InferType = true)]
public virtual IEnumerable<BBB> BBBCh { get; set; }
}
在剃刀视图中,如果我使用 Children 属性,我无法获得 AAA 或 BBB 对象,
@foreach (var child in Model.Children)
{
if (child is BBB)
{
var news = child as BBB;
<li>
11
</li>
}
else if (child is AAA)
{
var evt = child as AAA;
<li>
222
</li>
}
}
更有趣的是,如果我在 cshtml 中使用对 BBBCh 或 AAACh 属性的调用,我可以看到(在调试时)Children 属性包含正确的项目(对象),但如果我尝试从 Children 属性中获取任何项目,例如
var detailWidget = Model.Children.FirstOrDefault();
它将转换为 WB 类。 我能用它做什么?
【问题讨论】:
-
嘿.. 更新版本的 Glass 可能已经解决了这个问题。你用的是什么版本?
-
Glass v4 存在一个错误,这可能就是您所看到的。它已在 4.0.1.5 版中修复 - github.com/mikeedwards83/Glass.Mapper/issues/132
-
我看到了这个版本问题,但我的版本是 4.0.1.8
-
您是否在 GlassMapperScCustom.cs 的 GlassLoaders 中注册了您的程序集?
-
@Arbejdsglæde 在您的 GlassMapperScCustom.cs GlassLoaders 方法中添加以下内容 - return new IConfigurationLoader[]{ new AttributeConfigurationLoader("[YOUR ASSEMBLY NAME"), };
标签: c# sitecore glass-mapper sitecore-mvc