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

Alternate shape for EditorTemplate of Field is not being recognized

当字段具有特定名称 (PublishingMethod) 时,我需要一个枚举器字段的 EditorTemplate 替代品。

基于 docs,我在与原始形状相同的文件夹中创建了一个具有图案 [ShapeType__FieldName] 的视图:

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

The Orchard framework automatically creates many alternates that you can use in your application. However, you can create templates for these alternate shapes.

注意:我无法使用 Shape Tracing 模块,即使安装了全新的 Orchard,它也无法正常工作。

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

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

@Html.Partial("PublishingMethodEditor", m, new ViewDataDictionary {
    TemplateInfo = new TemplateInfo { HtmlFieldPrefix = Model.Prefix }
})

然后添加另一个名为 PublishingMethodEditor.cshtml 的视图,其中包含您希望对编辑器进行的覆盖。所有这些视图都应该放在 Views 文件夹的根目录中。

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

编辑 1 如果您在其他不想覆盖的内容类型上有该字段名称,则可以使用覆盖 EditorTemplate-ContentTypeName-PublishingMethod.cshtml