我想要实现的是自定义在使用Umbraco Forms创建的表单的HttpPost
/ OnSubmit
期间发生的事情,同时仍然保持表单的默认行为和任何后续工作流程
在我的特定场景中,我需要能够分析表单的输入,并根据该输入我将用户发送到不同的“谢谢”页面,同时还存储最初提交的表单的一些元素TempData的。
我尝试了以下内容:
我尝试创建一个DocType控制器(RenderMvcController
),但这只允许你
覆盖HttpGet,而不是发布。
我无法使用SurfaceController,因为我失去了它的功能 模块,Umbraco Forms。
我尝试使用自定义工作流程,但这是异步运行的 用户的旅程,我无法改变他们的经历。
根本没有太多有用的文档,我发现这项任务比我预期的要困难。
答案 0 :(得分: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的基本实现
使用上面的新控制器更新UmbracoFormsController
中/Views/Partials/Forms/Form.cshtml
的引用。
...
@using (Html.BeginUmbracoForm<CustomUmbracoFormsController>("HandleForm"))
...
在上面的示例中,我们分析表单数据并在TempData
中存储一些信息,我们可以将表单设置为重定向到一般的感谢页面,我们可以在其中分析{{1}中的值并更改用户看到的视图。
此外,如果您要更改表单值以及要更新的内容,则需要Record Guid,您可以从TempData
结合新的TempData["Forms_Current_Record_id"]
对象检索它