Arb*_*æde 5 c# sitecore sitecore-mvc glass-mapper
我无法理解为什么Glass Mapper无法以正确的方式投射对象,如下所述, 我有下一课
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; }
}
Run Code Online (Sandbox Code Playgroud)
在razor视图中,如果我使用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>
}
}
Run Code Online (Sandbox Code Playgroud)
更有趣的是,如果我在cshtml上使用调用BBBCh或AAACh属性,我可以看到(在调试时)Children属性包含正确的项目(对象)但是如果我尝试从Children属性中获取任何项目
var detailWidget = Model.Children.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
它会转向WB类.我能用它做什么?
小智 4
我的版本 4.0.5.54 遇到了完全相同的问题。
我的解决方案是将子类型指定为属性,就像您对 AAACh 和 BBBch 所做的那样。但设置时无需延迟加载它们。
[SitecoreType(TemplateId = "{YYY}", AutoMap = true)]
public class RazorRenderClass: BC
{
[SitecoreChildren(InferType = true, IsLazy = false)]
public virtual IEnumerable<WB> Children { get; set; }
[SitecoreChildren(InferType = true, IsLazy = false)]
public virtual IEnumerable<AAA> AAACh { get; set; }
[SitecoreChildren(InferType = true, IsLazy = false)]
public virtual IEnumerable<BBB> BBBCh { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我真的不喜欢我必须指定 AAACh 和 BBBch 作为属性。在 glassmapper v3 中,以下内容就足够了。
[SitecoreType(TemplateId = "{YYY}", AutoMap = true)]
public class RazorRenderClass: BC
{
[SitecoreChildren(InferType = true)]
public virtual IEnumerable<WB> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)