形状的"前缀"部分在编辑器方法中有什么作用?

dot*_*00b 3 orchardcms asp.net-mvc-3

using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;

namespace Orchard.Webshop.Drivers {
    public class ProductDriver : ContentPartDriver<ProductPart> {
        protected override DriverResult Editor(ProductPart part, dynamic shapeHelper)
        {
            return ContentShape("Parts_Product_Edit", () => shapeHelper.EditorTemplate(TemplateName: "Parts/Product", Model: part, Prefix: Prefix));
        }

        protected override DriverResult Editor(ProductPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            updater.TryUpdateModel(part, Prefix, null, null);
            return Editor(part, shapeHelper);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直在寻找Prefix的功能,但没有找到任何定义它或解释它的目的.如果Prefix可以在编辑器以外的方法中使用,请随时就此进行说明.谢谢.

Gis*_*mby 8

它是一个字符串前缀,附加到编辑器模板的表单字段名称中.这是需要的原因:

假设您创建了一个名为NoobsPart的新内容部件,其中包含一个名为"Text"的属性.在包含N00bsPart的"N00b"内容类型中,您还附加了一个BodyPart.BodyPart还有一个名为"Text"的属性.BodyPart和N00bsPart的html字段名称会在回发时相互冲突.该前缀解决了字段名称冲突的问题.通常,可以将前缀设置为部件名称以消除歧义并避免冲突.我不确定Prefix是否在其他任何地方使用,但考虑到它解决的问题,我想不会.

以下是Orchard核心代码中的示例,我通常将前缀设置为驱动程序中的类属性:

using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;

namespace Orchard.Webshop.Drivers {
    public class ProductDriver : ContentPartDriver<ProductPart> {
        protected override string Prefix { get { return "ProductPart"; } }
        protected override DriverResult Editor(ProductPart part, dynamic shapeHelper)
        {
            return ContentShape("Parts_Product_Edit", () => shapeHelper.EditorTemplate(TemplateName: "Parts/Product", Model: part, Prefix: Prefix));
        }

        protected override DriverResult Editor(ProductPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            updater.TryUpdateModel(part, Prefix, null, null);
            return Editor(part, shapeHelper);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)