当Field具有特定名称(PublishingMethod)时,我需要一个Enumerator字段的EditorTemplate替代。
基于docs,我在与原始形状相同的文件夹中创建了一个模式[ShapeType__FieldName]的视图:
这不起作用,仍然使用原件。我想过改变驱动程序中的编辑器方法,但我认为这违背了替代方案的目的,即Orchard自动检测到正确的形状,正如我从文档中所理解的那样:
Orchard框架会自动创建许多可在应用程序中使用的替代项。但是,您可以为这些替代形状创建模板。
注意:我无法使用Shape Tracing模块,即使安装了干净的Orchard也无法使用。
答案 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