2016-11-28 76 views
0

我試圖實現的是自定義在使用Umbraco Forms創建的表單的HttpPost/OnSubmit期間發生的情況,同時仍保持表單和任何後續工作流程的默認行爲。使用Umbraco表單提交表單的自定義方法

在我的具體情況中,我需要能夠分析表單的輸入,並基於該輸入,我將把用戶發送到不同的「謝謝」頁面,同時還存儲原始提交表單的一些元素在TempData中。

我已經試過如下:

  • 我試圖創建一個DOCTYPE控制器(RenderMvcController),但這隻讓你 覆蓋HTTPGET,並沒有發佈。

  • 我無法使用SurfaceController,因爲我失去了 模塊Umbraco Forms的功能。

  • 我試過使用自定義工作流程,但這與用戶的旅程異步運行到 ,我無法改變他們的體驗。

沒有太多有用的文檔可用於此,我發現這項任務比我預期的要困難得多。

回答

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; 
     } 
} 

以上是一個基本的實現,不佔空

更新的參考UmbracoFormsController/Views/Partials/Forms/Form.cshtml與您的新控制器從上面。

... 
@using (Html.BeginUmbracoForm<CustomUmbracoFormsController>("HandleForm")) 
... 

在上面的例子中,我們分析了表單數據,並存儲在TempData一些信息,我們可以設置重定向到一個通用的形式感謝你,我們可以分析值在TempData並更改頁面查看用戶看到的內容。

此外,如果您要更改表單值以及要更新的內容,您需要記錄指導,您可以從TempData["Forms_Current_Record_id"]中檢索到該指導,並結合新的RecordStore對象。