Asp.net mvc 果园分类形状按显示类型交替
我使用形状跟踪器是为了使用一个名为location的分类字段的替代视图。但是,与其他形状不同的是,在本例中,替代图形不提供不同显示类型的选项“摘要”或“详细信息”。因此,通过改变1,你就改变了另一个。我需要能够独立完成这些任务 我创建了一个视图,请参见下面的Fields.Contrib.TaxonomyField Location.cshtml,但正如我所说,如果显示类型是details或summary,则呈现相同的视图 请告诉我如何克服这个问题 谢谢你,乔恩。您可以通过实现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
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。选择分类屋>位置后查看形状跟踪器的图像:(不知道如何嵌入图像对不起)谢谢