Как использовать BizForms в Kentico 12 без компоновщика страниц - PullRequest
1 голос
/ 11 марта 2019

Kentico 12 поддерживает формы только с использованием виджета-конструктора страниц «Из коробки» из коробки.

Может ли кто-нибудь привести примеры того, как можно использовать BizForms в MVC _Layout.cshtml или на страницах, которые не используют конструктор страниц?

Критерии приемки:

  • Необходимо разрешить пользователям CMS редактировать форму и отражать изменения на сайте
  • Должен позволять разработчику манипулировать / преобразовывать представленные данные до их сохранения в Kentico и до отправки уведомлений / автоответчиков
  • Должен правильно отображать пользовательские FormSections и пользовательские FormComponents, используемые в конструкторе форм

Ответы [ 3 ]

1 голос
/ 29 марта 2019

Виджет Форма отображается с использованием комбинации следующей структуры вида и модели вида FormWidgetViewModel:

using (Ajax.Kentico().BeginForm( ... ))
{
    @Html.AntiForgeryToken()

    @Html.Kentico().FormFields(Model.FormComponents, Model.FormConfiguration, FormFieldRenderingConfiguration.Widget)

    // Render Model.SubmitButtonImage using @Html.Kentico().ImageInput( ... )
    // Or render a plain <input> using Model.SubmitButtonText
}

Если у вас есть объект BizFormInfo для формы, он необходим для следующих свойств:

new FormWidgetViewModel
{
    FormName = formInfo.FormName,
    FormConfiguration = IFormBuilderConfigurationRetriever.Retrieve(formInfo),
    FormComponents = IFormProvider.GetFormComponents(formInfo).GetDisplayedComponents( ... ),
    FormPrefix = // This may be optional outside of the Page Builder context,
    SubmitButtonText = formInfo.FormSubmitButtonText,
    SubmitButtonImage = formInfo.FormSubmitButtonImage
}

Внутри Ajax.Kentico().BeginForm вы можете передать в контроллер и действие, обрабатывающее форму.

Используйте методы из IFormProvider, чтобы обновить или добавить отправку формы и отправить электронные письма.

Обновление (см. Комментарии) :

IFormBuilderConfigurationRetriever помечен internal, поэтому он не доступен напрямую. Его реализация в свою очередь использует IFormBuilderConfigurationSerializer для десериализации formInfo.FormBuilderLayout. Этот интерфейс также помечен internal. Кроме того, реализация этого интерфейса использует internal FormBuilderTypesBinder.

Это означает, что нет API, доступного для извлечения Model.FormConfiguration. Начиная с Kentico 12.0.16, вам нужно будет воссоздать внутреннюю функциональность. Основная реализация выглядит так:

JsonConvert.DeserializeObject<FormBuilderConfiguration>(formInfo.FormBuilderLayout, new JsonSerializerSettings
    {
        ContractResolver = new CamelCasePropertyNamesContractResolver(),
        TypeNameHandling = TypeNameHandling.Auto,
        SerializationBinder = // Set to the internal FormBuilderTypesBinder, which validates only known form builder types
        StringEscapeHandling = StringEscapeHandling.EscapeHtml
    });

0 голосов
/ 13 марта 2019

Вы можете взглянуть на пространство имен Kentico.Forms.Web.Mvc.Widgets в своем проекте MVC (оно должно быть включено по умолчанию).

В нем есть KenticoFormWidgetController класс контроллера, который визуализирует частичные формы и принимает отправленные формы. Возможно, вы могли бы использовать индексный маршрут этого контроллера для визуализации части вашей формы, однако мне неизвестно, как именно выглядит маршрут.

Если у вас есть доступ к исходному коду в Kentico, вы можете проверить его внутреннее устройство самостоятельно.

0 голосов
/ 11 марта 2019

Hades, Вы можете использовать Forms API (https://docs.kentico.com/api12/content-management/form-data) для сохранения / доступа к данным формы и реализации полностью настраиваемого макета для них. Надеюсь, это поможет!

...