显示块的 Piranha CMS MVC 标签问题
Posted
技术标签:
【中文标题】显示块的 Piranha CMS MVC 标签问题【英文标题】:Piranha CMS MVC tag problem with displaying blocks 【发布时间】:2020-08-30 07:36:33 【问题描述】:所以我一直在为 .Net Core 3.1 学习 Piranha CMS。
阅读了文档并研究了模板后,我在从 Blocks 中获取信息以正确显示在页面上时遇到了一些困难。
在 Page.cs 上的 Razor 博客模板中,开发人员使用以下代码显示页面在屏幕上的块
<h1>@Model.Data.Title</h1>
@html.DisplayFor(m => m.Data.Blocks)
在模板网站的 关于我 页面上,显示如下: Image of what should happen
在我自己的网站上,我编写了相同的内容,并为页面分配了一些简单的文本块来测试它,但是我得到了以下信息:My Site
谁能指出我可能犯的错误的正确方向?
Startup.cs 和其他基本文件都很好,没有任何重大区别。
我能看到的网站上唯一的区别是我的缺乏样式。但我不明白为什么会影响它。
干杯
【问题讨论】:
【参考方案1】:我已经在 Gitter 聊天中回答了,但如果其他人有同样的问题,我也会在这里回答。
显示模板和编辑器模板
模板系统是ASP.NET Core
的内置功能,并假设您的项目中存在以下文件夹。
MVC
Views
Views/DisplayTemplates
Views/EditorTemplates
剃刀页面
Pages
Pages/DisplayTemplates
Pages/EditorTemplates
调用模板
当您在对象集合上调用 DisplayFor()
时,例如您从 Razor 博客模板 ASP.NET
引用的代码会自动选择名称与类型名称对应的模板。因此,在这种情况下,如果您的块是 Piranha.Extend.Blocks.TextBlock
类型,它将尝试定位视图文件:
Pages/DisplayTemplates/TextBlock.cshtml
现在,如果您在视图中有自己的循环,假设您想在每个块周围添加一个包含 div
并将单个对象放入 EditorFor()
的标准渲染 ASP.NET
将被执行只是打印出给定对象的属性。
不会按照你想要的方式工作
@foreach (var block in Model.Data.Blocks)
<div class="myclass">
@Html.DisplayFor(m => block)
</div>
解决方法
简单的解决方法是只提供要呈现块的 DisplayTemplate 的名称。这可以通过编写来轻松实现:
@foreach (var block in Model.Data.Blocks)
<div class="myclass">
@Html.DisplayFor(m => block, block.GetType().Name)
</div>
最好的问候
哈坎
【讨论】:
此解决方法在站点呈现时有效,但当我尝试通过 API 调用呈现部分视图时它对我不起作用。我在同一个项目中有一个用于此类型的 DisplayTemplate .cshtml 文件。我只显示 ID 和类型名称。你知道为什么吗?以上是关于显示块的 Piranha CMS MVC 标签问题的主要内容,如果未能解决你的问题,请参考以下文章