Что делает часть фигуры «Префикс» в методе «Редактор»? - PullRequest
3 голосов
/ 26 марта 2012
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);
        }
    }
}

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

1 Ответ

8 голосов
/ 27 марта 2012

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

Допустим, вы создаете новую контентную часть с именем NoobsPart со свойством «Текст». И в типе контента «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);
        }
    }
}
...