gpt4 book ai didi

c# - 使用 Glass Mapper 在 Sitecore View 渲染中使用通用类型

转载 作者:行者123 更新时间:2023-11-30 17:42:47 26 4
gpt4 key购买 nike

设置

模型

POCO,virtual Glass Mapper 需要。

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 引用为 View 渲染,模型指向 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 模型的模型类型(在 /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 减速解析模型。

关于c# - 使用 Glass Mapper 在 Sitecore View 渲染中使用通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31652030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com