Asp.net mvc 果园分类形状按显示类型交替

Asp.net mvc 果园分类形状按显示类型交替,asp.net-mvc,orchardcms,orchardcms-1.6,Asp.net Mvc,Orchardcms,Orchardcms 1.6,我使用形状跟踪器是为了使用一个名为location的分类字段的替代视图。但是,与其他形状不同的是,在本例中,替代图形不提供不同显示类型的选项“摘要”或“详细信息”。因此,通过改变1,你就改变了另一个。我需要能够独立完成这些任务 我创建了一个视图,请参见下面的Fields.Contrib.TaxonomyField Location.cshtml,但正如我所说,如果显示类型是details或summary,则呈现相同的视图 请告诉我如何克服这个问题 谢谢你,乔恩。您可以通过实现ShapeDispl

我使用形状跟踪器是为了使用一个名为location的分类字段的替代视图。但是,与其他形状不同的是,在本例中,替代图形不提供不同显示类型的选项“摘要”或“详细信息”。因此,通过改变1,你就改变了另一个。我需要能够独立完成这些任务

我创建了一个视图,请参见下面的Fields.Contrib.TaxonomyField Location.cshtml,但正如我所说,如果显示类型是details或summary,则呈现相同的视图

请告诉我如何克服这个问题

谢谢你,乔恩。您可以通过实现
ShapeDisplayEvents
类来提供自己的备选方案

以下是一个实现,它根据内容类型、显示类型或两者提供备选方案:

public class PartContentTypeAlternateFactory : ShapeDisplayEvents {
    public override void Displaying(ShapeDisplayingContext context) {
        context.ShapeMetadata.OnDisplaying(displayedContext => {
            var shapeType = displayedContext.ShapeMetadata.Type;
            var contentItem = displayedContext.Shape.ContentItem;
            var displayType = displayedContext.ShapeMetadata.DisplayType;
            var contentType = contentItem.ContentType;
            displayedContext.ShapeMetadata.Alternates.Add(
                String.Format("{0}__{1}", shapeType, displayType));
            displayedContext.ShapeMetadata.Alternates.Add(
                String.Format("{0}__{1}__{2}", shapeType, (string)contentType, displayType));
            });
    }
}
最终,在形状跟踪器中会出现一些额外的备选形状,如下所示:

现在,您可以使用名为
Fields.Contrib.TaxonomyField Location Summary
Fields.Contrib.TaxonomyField Location detailure
等的替代项。您可以扩展该类以添加所需的任何替代项

编辑

我没有意识到您无法轻松获取字段名,因此请尝试类似的方法-它执行类似于
uralternatesfactory
的操作,即,它在现有备选项上循环并向其添加显示类型。这将为您提供一个包含字段名和显示类型的替代项

public class PartContentTypeAlternateFactory : ShapeDisplayEvents {
    public override void Displaying(ShapeDisplayingContext context) {
        context.ShapeMetadata.OnDisplaying(displayedContext => {
            var alternates = displayedContext.ShapeMetadata.Alternates.Select(a => a + "__" + displayedContext.ShapeMetadata.DisplayType);
            displayedContext.ShapeMetadata.Alternates = displayedContext.ShapeMetadata.Alternates.Union(alternates).ToList();
        });
    }
}
。您可以通过实现
ShapeDisplayEvents
类来提供自己的备选方案

以下是一个实现,它根据内容类型、显示类型或两者提供备选方案:

public class PartContentTypeAlternateFactory : ShapeDisplayEvents {
    public override void Displaying(ShapeDisplayingContext context) {
        context.ShapeMetadata.OnDisplaying(displayedContext => {
            var shapeType = displayedContext.ShapeMetadata.Type;
            var contentItem = displayedContext.Shape.ContentItem;
            var displayType = displayedContext.ShapeMetadata.DisplayType;
            var contentType = contentItem.ContentType;
            displayedContext.ShapeMetadata.Alternates.Add(
                String.Format("{0}__{1}", shapeType, displayType));
            displayedContext.ShapeMetadata.Alternates.Add(
                String.Format("{0}__{1}__{2}", shapeType, (string)contentType, displayType));
            });
    }
}
最终,在形状跟踪器中会出现一些额外的备选形状,如下所示:

现在,您可以使用名为
Fields.Contrib.TaxonomyField Location Summary
Fields.Contrib.TaxonomyField Location detailure
等的替代项。您可以扩展该类以添加所需的任何替代项

编辑

我没有意识到您无法轻松获取字段名,因此请尝试类似的方法-它执行类似于
uralternatesfactory
的操作,即,它在现有备选项上循环并向其添加显示类型。这将为您提供一个包含字段名和显示类型的替代项

public class PartContentTypeAlternateFactory : ShapeDisplayEvents {
    public override void Displaying(ShapeDisplayingContext context) {
        context.ShapeMetadata.OnDisplaying(displayedContext => {
            var alternates = displayedContext.ShapeMetadata.Alternates.Select(a => a + "__" + displayedContext.ShapeMetadata.DisplayType);
            displayedContext.ShapeMetadata.Alternates = displayedContext.ShapeMetadata.Alternates.Union(alternates).ToList();
        });
    }
}

非常感谢你的帮助看起来正是这样。我要试一试!对不起,但是你把cs文件放在哪里了。啊,对不起,我应该说-它需要放在一个模块中,因为如果你把它添加到一个主题中,它将不起作用。如果没有可以使用的主题,可以为您指出入门的一般方向。事实上,如果主题有csproj文件,它应该可以在主题中工作。谢谢这两个文件,我现在有了形状跟踪器来显示摘要。然而,我无法达到写作水平。我有房子的分类,有两个子层,一个位置,一个属性类型。现在我正在尝试获取ields.Contrib.TaxonomyField-Location-Summary,但我可以获取ields.Contrib.TaxonomyField-House-Summary或ields.Contrib.TaxonomyField-Location。选择分类屋>位置后查看形状跟踪器的图像:(不知道如何嵌入图像抱歉)非常感谢您的帮助看起来就是这样。我要试一试!对不起,但是你把cs文件放在哪里了。啊,对不起,我应该说-它需要放在一个模块中,因为如果你把它添加到一个主题中,它将不起作用。如果没有可以使用的主题,可以为您指出入门的一般方向。事实上,如果主题有csproj文件,它应该可以在主题中工作。谢谢这两个文件,我现在有了形状跟踪器来显示摘要。然而,我无法达到写作水平。我有房子的分类,有两个子层,一个位置,一个属性类型。现在我正在尝试获取ields.Contrib.TaxonomyField-Location-Summary,但我可以获取ields.Contrib.TaxonomyField-House-Summary或ields.Contrib.TaxonomyField-Location。选择分类屋>位置后查看形状跟踪器的图像:(不知道如何嵌入图像对不起)谢谢