1

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

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

我尝试了以下方法:

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

  • 我无法使用 SurfaceController,因为我失去了模块 Umbraco Forms 的功能。

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

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

4

1 回答 1

3

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

创建一个新的控制器并继承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

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

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

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

此外,如果您要更改 Form 值以及要更新的内容,您将需要 Record Guid,您可以将其TempData["Forms_Current_Record_id"]与新RecordStore对象一起检索。

于 2016-11-28T15:18:55.123 回答