Что делает префиксная часть фигуры в методе редактора?

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);
        }
    }
}

Я искал, что делает префикс, но не нашел ничего, что бы его определяло или объясняло его назначение. И если префикс можно использовать в методах, отличных от редактора, пожалуйста, не стесняйтесь уточнять и это. Спасибо.


person dotnetN00b    schedule 26.03.2012    source источник


Ответы (1)


Это строковый префикс, который добавляется к именам полей формы в шаблонах редактора. Причина, по которой это необходимо:

Допустим, вы создаете новую часть контента с именем NoobsPart со свойством Text. А в типе контента «N00b», который содержит N00bsPart, вы также присоединяете BodyPart. BodyPart также имеет свойство под названием «Текст». Имена HTML-полей BodyPart и N00bsPart будут конфликтовать друг с другом при обратной передаче. Префикс решает проблему конфликта имен полей. Как правило, префикс может быть установлен для имени детали, чтобы устранить неоднозначность и избежать конфликтов. Я не уверен, что этот префикс используется где-то еще, но, учитывая проблему, которую он решает, думаю, что нет.

Следуя примерам в основном коде 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);
        }
    }
}
person Giscard Biamby    schedule 26.03.2012
comment
Отличный ответ. Имеет смысл. Я бы сказал, что-то подобное есть в документации. Может плохо искал..... - person dotnetN00b; 27.03.2012
comment
Документация, как и остальная часть Orchard, имеет открытый исходный код и управляется сообществом. Пока кто-то что-то не напишет, этого нет ;) - person Bertrand Le Roy; 27.03.2012
comment
@BertrandLeRoy: Ну, не могу спорить об этом... слишком много :) - person dotnetN00b; 28.03.2012