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



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

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

我尝试了以下方法:

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

  • 我无法使用表面控制器,因为我失去了 模块,本布拉科形式。

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

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

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

创建一个新的控制器并从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 的基本实现

从上方更新对UmbracoFormsController/Views/Partials/Forms/Form.cshtml的新控制器的引用。

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

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

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

相关内容

  • 没有找到相关文章

最新更新