Пользовательский метод отправки форм с помощью форм Umbraco

То, что я пытаюсь достичь, это настроить то, что происходит во время HttpPost/OnSubmit формы, созданной с помощью форм Umbraco, при этом сохраняя поведение формы по умолчанию и все последующие рабочие процессы.

В моем конкретном сценарии мне нужно иметь возможность анализировать ввод формы и на основе этого ввода я отправлю пользователя на другую страницу "спасибо", а также сохраню некоторые элементы первоначально представленной формы в TempData.

Я пробовал следующее:

  • Я пытался создать контроллер DocType (RenderMvcController), но это позволяет вам только переопределить HttpGet, а не Post.

  • Я не могу использовать SurfaceController, так как теряю функциональность модуля Umbraco Forms.

  • Я пытался использовать пользовательский рабочий процесс, но он работает асинхронно с поездкой пользователя, и я не могу изменить его опыт.

Для этого не так много полезной документации, и я нахожу эту задачу более сложной, чем я ожидал.

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мы можем установить форму для перенаправления на общую страницу благодарности, на которой мы можем анализировать значения в TempData и измените вид, который видит пользователь.

Кроме того, если вы вносите изменения в значения формы и то, что они должны быть обновлены, вам понадобится Guid Record, который вы можете получить из TempData["Forms_Current_Record_id"] в сочетании с новым RecordStore объект.

Другие вопросы по тегам