Orchardcms 在Orchard中,是否可以在渲染之前动态更改形状中的HTML?

Orchardcms 在Orchard中,是否可以在渲染之前动态更改形状中的HTML?,orchardcms,orchardcms-1.10,Orchardcms,Orchardcms 1.10,这是Content.ThumbnailSummary.cshtml的标记,这是一种自定义显示类型,我用来将ContentItems呈现为可单击的缩略图,其内容绝对位于缩略图之上 @使用Orchard.Utility.Extensions; @{ var contentTypeClassName=((字符串)Model.ContentItem.ContentType).HtmlClassify(); } @显示(型号标题) @显示(Model.Content) @显示(Model.Footer)

这是
Content.ThumbnailSummary.cshtml
的标记,这是一种自定义显示类型,我用来将ContentItems呈现为可单击的缩略图,其内容绝对位于缩略图之上

@使用Orchard.Utility.Extensions;
@{
var contentTypeClassName=((字符串)Model.ContentItem.ContentType).HtmlClassify();
}
@显示(型号标题)
@显示(Model.Content)
@显示(Model.Footer)
问题是,开箱即用的大多数部分和字段都被渲染为链接或包含链接的段落,而嵌套的
标记在大多数浏览器中会严重破坏DOM渲染。缩略图摘要应不包含任何链接

我可以为每个字段和零件创建替代项,也可以在默认情况下删除放置中的所有内容,只在需要时为特定情况添加规则。但是这会非常乏味,并且会破坏放置的许多好处,所以我希望我能以某种方式剥离或替换代码中的所有标记,仅用于具有此显示类型的形状

我一直在朝这个方向看,但我不确定它是否可行:

公共类形状:IShapeTableProvider
{
公共空间发现(ShapeTableBuilder)
{
生成器。描述(“内容”)
.OnDisplay(显示=>
{
如果(displaying.ShapeMetadata.DisplayType==“ThumbnailSummary”)
{             
//在这里做点什么???
}
});
}
}

您几乎是对的,不需要提供程序,而是添加一个继承自
Orchard.DisplayManagement.Implementation.ShapeDisplayEvents
的类,或者自己实现
IShapeDisplayEvents

我自己这样做是为了从管理区域中删除某些无法通过功能或权限禁用的功能

代码应该是这样的

public class MyShapeDisplayEvents : Orchard.DisplayManagement.Implementation.ShapeDisplayEvents
{
  public override void Displayed(Orchard.DisplayManagement.Implementation.ShapeDisplayedContext context)
  {
    if (context.Shape is Orchard.DisplayManagement.Shapes.Shape)
    {
      Orchard.DisplayManagement.Shapes.Shape lShape = (Orchard.DisplayManagement.Shapes.Shape)context.Shape;

      if (lShape.Metadata.Type == "Layout")
      { 
        string lChildContent = context.ChildContent.ToHtmlString();

        // do something with the content like removing tags

        context.ChildContent = new System.Web.HtmlString(lChildContent);
      }

      ...