Orchardcms 未识别字段的EditorTemplate的替代形状

Orchardcms 未识别字段的EditorTemplate的替代形状,orchardcms,orchardcms-1.10,Orchardcms,Orchardcms 1.10,我需要一个枚举器字段的EditorTemplate的替代项,该字段具有特定名称时使用(PublishingMethod) 基于,我在与原始形状相同的文件夹中创建了一个具有模式[ShapeType\uuuu FieldName]的视图: 这不起作用,仍然使用原始版本。我曾想过更改驱动程序中的编辑器方法,但我认为这违背了alternates的目的,即Orchard自动检测正确的形状,正如我从文档中了解的: Orchard框架自动创建许多可在应用程序中使用的备选方案。但是,您可以为这些备用形状创建模

我需要一个枚举器字段的EditorTemplate的替代项,该字段具有特定名称时使用(PublishingMethod)

基于,我在与原始形状相同的文件夹中创建了一个具有模式[ShapeType\uuuu FieldName]的视图:

这不起作用,仍然使用原始版本。我曾想过更改驱动程序中的编辑器方法,但我认为这违背了alternates的目的,即Orchard自动检测正确的形状,正如我从文档中了解的:

Orchard框架自动创建许多可在应用程序中使用的备选方案。但是,您可以为这些备用形状创建模板


注意:我无法使用形状跟踪模块,即使在干净的Orchard安装中,它也无法工作。

Orchard中的编辑器的工作方式与显示的工作方式不同。我想这是你获得MVC风格体验的原因。基本上,返回的实际形状是EditorTemplate类型,它会绑定模型和前缀,然后使用给定的模板名称呈现局部视图。这意味着备选方案无法按预期或文档状态工作。字段名的替代项实际上已添加到EditorTemplate形状中。因此,您可以添加一个名为
editorTemplatePublishingMethod.cshtml
的视图,其内容如下:

@{ 
    var m = (Orchard.Fields.Fields.EnumerationField)Model.Model;
}

@Html.Partial("PublishingMethodEditor", m, new ViewDataDictionary {
    TemplateInfo = new TemplateInfo { HtmlFieldPrefix = Model.Prefix }
})
然后添加另一个名为
PublishingMethodEditor.cshtml
的视图,其中包含您想要的编辑器覆盖。所有这些视图都应该放在视图文件夹的根目录下

另一种方法是实现
IShapeTableProvider
接口,并在特定条件下调整
TemplateName
属性,但这需要代码

编辑1
如果您不想覆盖其他内容类型上的字段名,可以使用覆盖
editorTemplateContentTypeName PublishingMethod.cshtml

在何处使用该模板?在管理层?请注意,您不应在您不拥有的模块中更改或添加文件。若要调试此模块,您可以实现
IShapeTableProvider
,并查看形状表和找到的替代项。如果您的备选方案不在其中,则可能是命名错误,或者根本没有自动添加备选方案的实现(在这种情况下,您可以自己在实现中添加备选方案)。@BertrandLeRoy是的,在管理中编辑内容时,我想使用自己的控件来控制具有此名称的枚举数字段。备选方案将出现在我的主题中,现在是与原始方案一起放弃路由或命名错误,同时将其提交给workNote。注意,如果您想正确处理问题,这个新视图需要进入一个管理主题(在Orchard 1.x中这不是一个微不足道的问题)。另一个可能更明智的选择是构建自己的字段类型。您也没有指定确切的用例。很可能已经有一个非常合适的字段供您使用,例如分类法。我想您可能会将此视图覆盖放在您自己的模块中,该模块可能会提供一个部件,其中包含一个附加字段,您希望自定义编辑器。当我需要时,我的要求是我们有一个演讲者分类法和选择演讲者的编辑器,分类法字段,需要显示演讲者名称和缩略图,而不仅仅是默认的复选框列表。我当时觉得很傻,现在也觉得很傻,但是嘿