无法识别EditorTemplate of Field的替代形状

时间:2018-01-24 23:40:13

标签: orchardcms orchardcms-1.10

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

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

Alternate Template

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

  

Orchard框架会自动创建许多可在应用程序中使用的替代项。但是,您可以为这些替代形状创建模板。

注意:我无法使用Shape Tracing模块,即使安装了干净的Orchard也无法使用。

1 个答案:

答案 0 :(得分:3)

Orchard的编辑与Display的工作方式不同。我想这是你获得MVC风格的体验。基本上,返回的实际形状是EditorTemplate类型,然后绑定模型和前缀,然后使用您给出的模板名称呈现部分视图。这意味着替代方案不会按预期工作,或者如文档所述。实际名称的替换项实际上已添加到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