使用 Umbraco Forms 提交表单的自定义方法
Custom method on form submission with Umbraco Forms
我想要实现的是自定义在使用 Umbraco Forms 创建的表单的 HttpPost
/OnSubmit
期间发生的事情,同时仍保持表单的默认行为以及任何后续工作流程。
在我的特定场景中,我需要能够分析表单的输入,并根据该输入将用户发送到不同的 "thank you" 页面,同时还存储一些原始元素在 TempData 中提交表单。
我试过以下方法:
我尝试创建一个 DocType 控制器 (RenderMvcController
),但这只允许您
覆盖 HttpGet,而不是 Post.
我无法使用 SurfaceController,因为我失去了
模块,Umbraco 形式。
我试过使用自定义工作流,但它异步运行
用户的旅程,我无法改变他们的体验。
对此根本没有太多有用的文档,我发现这项任务比我预期的要难。
为了在提交表单后添加自定义程序,并基于此程序更改用户旅程,您必须执行以下操作:
创建一个新的控制器并继承自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
对象。
我想要实现的是自定义在使用 Umbraco Forms 创建的表单的 HttpPost
/OnSubmit
期间发生的事情,同时仍保持表单的默认行为以及任何后续工作流程。
在我的特定场景中,我需要能够分析表单的输入,并根据该输入将用户发送到不同的 "thank you" 页面,同时还存储一些原始元素在 TempData 中提交表单。
我试过以下方法:
我尝试创建一个 DocType 控制器 (
RenderMvcController
),但这只允许您 覆盖 HttpGet,而不是 Post.我无法使用 SurfaceController,因为我失去了 模块,Umbraco 形式。
我试过使用自定义工作流,但它异步运行 用户的旅程,我无法改变他们的体验。
对此根本没有太多有用的文档,我发现这项任务比我预期的要难。
为了在提交表单后添加自定义程序,并基于此程序更改用户旅程,您必须执行以下操作:
创建一个新的控制器并继承自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
对象。