使用 Umbraco Forms 提交表单的自定义方法

Custom method on form submission with Umbraco Forms

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

在我的特定场景中,我需要能够分析表单的输入,并根据该输入将用户发送到不同的 "thank you" 页面,同时还存储一些原始元素在 TempData 中提交表单。

我试过以下方法:

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

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

创建一个新的控制器并继承自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 并更改用户看到的视图。

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