如何在没有页面构建器的Kentico 12中使用BizForms

问题描述 投票:1回答:3

Kentico 12仅支持使用“表单”页面构建器小部件开箱即用的表单。

任何人都可以提供如何在MVC _Layout.cshtml或不使用页面构建器的页面中使用BizForms的示例吗?

验收标准:

  • 必须允许CMS用户编辑表单并在站点上反映更改
  • 必须允许开发人员在保存到Kentico之前和发送通知/自动回复之前操作/转换提交的数据
  • 必须正确呈现表单构建器中使用的自定义FormSections和自定义FormComponents
asp.net-mvc kentico kentico-mvc kentico-12
3个回答
1
投票

使用以下视图结构和视图模型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

这意味着没有可用于检索Model.FormConfiguration的API。从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
投票

Hades,您可以使用Forms API(https://docs.kentico.com/api12/content-management/form-data)来保存/访问表单数据并为其实现完全自定义的布局。希望有所帮助!


0
投票

您可以查看MVC项目中的Kentico.Forms.Web.Mvc.Widgets命名空间(默认情况下应该包含它)。

在有一个KenticoFormWidgetController控制器类,它呈现部分形式并接受表单提交。您可以使用该控制器的索引路径来渲染表单的一部分,但是我不知道路径的确切位置。

如果你有Kentico的源代码访问权限,你可以自己检查它的内部。

© www.soinside.com 2019 - 2024. All rights reserved.