2016-11-28 14 views
0

私が達成しようとしているのは、Umbraco Formsで作成したフォームのHttpPost/OnSubmitの間に何が起こるのかをカスタマイズすることです。Umbracoフォームによるフォーム提出のカスタムメソッド

私の具体的なシナリオでは、フォームの入力を分析できるようにする必要があります。その入力に基づいて、ユーザーに別の「ありがとう」ページを送信します。また、最初に送信したフォームTempDataに保存します。私は次のことを試してみた

  • 私は、DOCTYPEコントローラ(RenderMvcController)を作成しようとしたが、これはあなただけがHTTPGETをオーバーライドして、投稿しないように ことができます。

  • Umbracoフォームの モジュールの機能が失われたため、SurfaceControllerを使用することはできません。

  • 私はカスタムワークフローを使用しようとしましたが、これは と非同期で実行され、ユーザーエクスペリエンスを変更できません。

これはまったく役に立たないドキュメンテーションではありません。この仕事は、私が期待していたよりも難しいと感じています。

答えて

0

フォームの提出後にカスタム手順を追加し、この手順に基づいて次の操作を行う必要があり、ユーザーの旅を変更するために:

新しいコントローラを作成し、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の値を分析し、変更することができているあなたに感謝ページユーザーに表示されます。

また、フォームの値を変更する場合、これらを更新するには、TempData["Forms_Current_Record_id"]から新しいRecordStoreオブジェクトとともに取得できるレコードガイドが必要です。