设置
模型
POCOs,Glass Mapper需要virtual
关键字。
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将其称为视图渲染,在Sitecore模型定义中,模型指向Sample.Parent
。
@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模型(在/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
作为模型)。
还是我疯了吗? :) 有更好的方法来实现这个吗?
/sitecore/layout/Models
下创建了一个模型定义,并将其设置为/sitecore/layout/Renderings
下的View Rendering定义中的“Model”字段?我通常不使用泛型,而是使用模型继承... - jammykamclass MyType : Parent<Article>
这样的类型,然后从Sitecore引用它。对我来说,这有点打败了目的。至少我不必编写重复的代码,但我必须在Sitecore中添加每个类型的引用。幸运的是,视图可以保留泛型类型声明。 - Simon Ingeson