virtual
Glass Mapper需要POCO 。
using System.Collections.Generic;
using Glass.Mapper.Sc.Configuration.Attributes;
using Glass.Mapper.Sc.Fields;
namespace Sample
{
public class Parent<T>
{
[SitecoreId]
public virtual Guid Id { get; set; }
public virtual string Title { get; set; }
public virtual IEnumerable<T> Children { get; set; }
}
public class Article
{
[SitecoreId]
public virtual Guid Id { get; set; }
public virtual string Title { get; set; }
public virtual string Text { get; set; }
}
public class Teaser
{
[SitecoreId]
public virtual Guid Id { get; set; }
public virtual string Title { get; set; }
public virtual Image Banner { get; set; }
}
}
被Sitecore引用为视图渲染,并指向模型Sample.Parent
(请参见下文以获取Sitecore模型定义)。
@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<Sample.Parent<Sample.Article>>
<h1>@Editable(x => x.Title)</h1>
<div class="article-list">
@foreach (var article in Model.Children)
{
<article class="article">
<h2 class="article-title">@Editable(article, x => x.Title)</h2>
<div class="article-content">@Editable(article, x => x.Text)</div>
</article>
}
</div>
@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<Sample.Parent<Sample.Teaser>>
<h1>@Editable(x => x.Title)</h1>
<div class="teaser-list">
@foreach (var teaser in Model.Children)
{
<article class="teaser">
<h2 class="teaser-title">@Editable(teaser, x => x.Title)</h2>
<div class="teaser-banner">@RenderImage(teaser, x => x.Banner)</div>
</article>
}
</div>
在这里,我不确定我是否做对了。这些是我定义为Sitecore模型的模型类型(在下方/sitecore/layout/models
)。
Sample.Parent`1[T], Sample
也尝试过(没有成功):
Sample.Parent, Sample
Sample.Parent`1[Sample.Article, Sample], Sample
Sample.Parent<Sample.Article>, Sample
)Sample.Article, Sample
Sample.Teaser, Sample
示例代码已简化,但是应该可以捕捉到我正在尝试做的事情。基本上,我希望能够使用泛型类型作为重用更多代码的方式。由于外部限制,我无法使用Glass Mapper 3以外的任何东西。我看到的错误是Sitecore找不到类型,或者是“未设置对象引用”(Sitecore.Mvc.Presentation.RenderingModel, Sitecore.Mvc
发生这种情况时,它似乎用作模型) )。
还是我疯了?:)是否有更好的方法来实现这一目标?
我认为Glass尝试处理通用字符串的方式可能会遇到困难(说实话,我从未设计过处理通用字符串的方法)。
如果您使用的是V4,则无需在Sitecore中定义模型。将模型字段保留为空白,Glass应该通过cshtml文件中的@inherits减速度解析模型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句