【问题标题】:Custom method on form submission with Umbraco Forms使用 Umbraco Forms 提交表单的自定义方法
【发布时间】:2016-11-28 15:18:55
【问题描述】:

我想要实现的是自定义在使用Umbraco Forms 创建的表单的HttpPost/OnSubmit 期间发生的事情,同时仍保持表单的默认行为和任何后续工作流程。

在我的特定场景中,我需要能够分析表单的输入,并根据该输入将用户发送到不同的“谢谢”页面,同时还将最初提交的表单的一些元素存储在临时数据。

我尝试了以下方法:

  • 我尝试创建一个 DocType 控制器 (RenderMvcController),但这仅允许您 覆盖 HttpGet,而不是 Post。

  • 我无法使用 SurfaceController,因为我失去了 模块,Umbraco 表格。

  • 我尝试使用自定义工作流,但它与 用户的旅程,我无法改变他们的体验。

根本没有太多有用的文档可用,而且我发现这项任务比我预期的要困难。

【问题讨论】:

    标签: asp.net-mvc umbraco7 umbraco-forms


    【解决方案1】:

    要在提交表单后添加自定义过程,并基于此过程更改用户旅程,您必须执行以下操作:

    创建一个新的控制器并从UmbracoFormsController继承并覆盖OnFormHandled方法

     public class CustomUmbracoFormsController : UmbracoFormsController
     {
          protected override void OnFormHandled(Form form, FormViewModel model)
          {
               // Find the field in the form, then search for a matching value
               var field = form.AllFields.FirstOrDefault(x => x.Alias == "deliveryOptions");
               var fieldValue = model.FormState[field.Id.ToString()].GetValue(0).ToString();
    
               // Add the value to the TempData
               TempData["deliveryOptions"] = fieldValue;
          }
     }
    

    以上是基本实现,不考虑NULL

    使用上面的新控制器更新/Views/Partials/Forms/Form.cshtml 中对UmbracoFormsController 的引用。

    ...
    @using (Html.BeginUmbracoForm<CustomUmbracoFormsController>("HandleForm"))
    ...
    

    在上面的例子中,我们分析表单数据并将一些信息存储在TempData中,我们可以将表单设置为重定向到一个通用的感谢页面,我们可以在其中分析TempData中的值并更改查看用户看到的内容。

    此外,如果您要更改表单值以及要更新的内容,您将需要记录 Guid,您可以从 TempData["Forms_Current_Record_id"] 中检索它以及新的 RecordStore 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      相关资源
      最近更新 更多