Виджет Форма отображается с использованием комбинации следующей структуры вида и модели вида 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
});