Пользовательский метод отправки форм с помощью форм 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
объект.