Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用Umbraco表单提交表单的自定义方法_Asp.net Mvc_Umbraco7_Umbraco Forms - Fatal编程技术网

Asp.net mvc 使用Umbraco表单提交表单的自定义方法

Asp.net mvc 使用Umbraco表单提交表单的自定义方法,asp.net-mvc,umbraco7,umbraco-forms,Asp.net Mvc,Umbraco7,Umbraco Forms,我试图实现的是定制使用创建的表单的HttpPost/OnSubmit过程中发生的事情,同时仍然保持表单和任何后续工作流的默认行为 在我的特定场景中,我需要能够分析表单的输入,并根据该输入将用户发送到不同的“谢谢”页面,同时还将最初提交的表单的一些元素存储在TempData中 我尝试了以下方法: 我尝试创建DocType控制器(RenderMvcController),但这只允许您 覆盖HttpGet,而不是Post 我无法使用SurfaceController,因为我失去了 模块,Umbrac

我试图实现的是定制使用创建的表单的
HttpPost
/
OnSubmit
过程中发生的事情,同时仍然保持表单和任何后续工作流的默认行为

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

我尝试了以下方法:

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

  • 我无法使用SurfaceController,因为我失去了 模块,Umbraco表单

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


没有太多有用的文档可用于此,我发现此任务比我预期的更困难。

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

创建一个新控制器并从
umbracoformscocontroller
继承,并重写
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
中对
umbracoformscocontroller
的引用

...
@using (Html.BeginUmbracoForm<CustomUmbracoFormsController>("HandleForm"))
...
。。。
@使用(Html.BeginUmbracoForm(“HandleForm”))
...
在上面的示例中,我们分析表单数据并将一些信息存储在
TempData
中,我们可以将表单设置为重定向到通用感谢页面,在该页面中,我们可以分析
TempData
中的值并更改用户看到的视图

此外,如果您要更改表单值以及要更新的内容,则需要记录Guid,您可以从
TempData[“Forms\u Current\u Record\u id”]
和新的
RecordStore
对象中检索该Guid