2017-01-11 37 views
0

我有一個內置在Kentico中的表單,並且想要更改表單動作以指向一個營銷自動化供應商網站(eloqua)來處理表單。我注意到無法在Form應用上更改Action,因此我想用js來動態替換動作。我不確定它是否可行,但我遇到的另一個直接問題是由Kentico生成的字段名稱/ ID太長(> 70個字符 - 例如p$lt$ctl02$pageplaceholder$p$lt$ctl03$On_lineForm$viewBiz$Company$txtText),並且超過了供應商允許的長度。有沒有辦法縮短這些名稱/ ID?Kentico表單 - 編輯表單動作和字段名稱

爲了澄清,我需要編輯名稱的原因,因爲供應商允許將html名稱映射(複製/粘貼)到任何使用的名稱。我嘗試從一個Kentico字段粘貼整個字符串,並得到超出字符限制的錯誤消息。

回答

1

問題的第一部分,我如何直接將表單提交給其他網站?

在ASP.Net中,唯一的方法是使用javascript來改變操作url。既然你想小心編輯這個,我會用jQuery來替換表單上的「提交」按鈕,並在提交之前改變表單的形式(所以你不要搞亂其他回傳)。

$("button.MySubmitButton").click(function() { 
    $("form").attr("action", "http://TheVendor.com/PostLocation"); 
}); 

接下來的問題是改變字段名稱。如果您絕對必須擁有70個以下的表單元素ID,您將不得不再次使用Javascript,並且會破壞元素的任何回發相關功能,因此在執行此操作之前請確保表單「按原樣」。

同樣存在安全問題,因爲當您發佈到其他位置時,您將發送所有數據,包括隱藏的包含視圖狀態等的asp.net輸入。在提交任何您不想發送到其他網站的字段之前,您可能需要花時間「消除」。

像這樣的東西(測試它有點第一雖然)

$("input:not(id*='txtName'):not(id*='txtEmail'),select:not(id*='ddlQuestion')").remove(); 
+0

謝謝!雖然不是100%回答了這個問題,但我想我可以從這裏得到它! – Michelle

0

從架構的角度來看,這不是一個好主意,並且如果不在供應商網站安全性中打開一個巨大的漏洞,最有可能無法工作。首先,如果他們不知道字段名稱,如果表單字段發生變化等,他們將如何處理這些信息。其次,如果嘗試將表單提交到另一個網站等等,您將會遇到麻煩。如果供應商網站沒有迴應等。 您需要做的是將表格提交回kentico網站,即在kentico網站上處理它,並將結果發送到營銷自動化供應商網站(現在簡單的方法)並將用戶重定向到供應商網站。

重定向和電子郵件 - 你可以在沒有任何編程的情況下開箱即用。實際上,要做到以上所有都不需要編程,並且您可以獲得Kentico網站上記錄的所有信息。

+0

我明白你的意思。我創造了一對夫婦Kentico形成自己,並看到他們工作得非常好。問題在於他們需要將表單與市場營銷自動化供應商聯繫起來的其他形式。而營銷自動化不僅僅是存儲形式/人的信息,也做了很多很多更多的東西如發送自動電子郵件,如果用戶的行爲觸及某些預定地標等等。我想,我只是使用iframe,如果出現最壞的最壞 – Michelle

1

正如@特雷弗 - J-fayas指出,你可以使用JavaScript來點形式作用到另一個URL。雖然這可行,但您最終可能會寫很多javascript,以便不僅將表單指向新的url,還會在將其發送到目標之前執行一些數據按摩(更改id,執行url格式化等)。

此外,您會失去使用Kentico表單的一些好處,因爲數據永遠不會實際返回給Kentico,例如電子郵件警報。

我在何地,我們將數據發送到Eloqua類似的情景的工作,但不是做客戶端,我們使用做到了從服務器之一:

  • OnOnAfterSave事件對BizForm控制本身
  • 全球BizForm提交鉤BizFormInfo.TYPEINFO.Events.Insert.After

的形式提交給Kentico,我們自定義的鉤子代碼運行將數據發送到Eloqua後。在任何一個鉤子中,您都可以完全訪問表單元數據,字段名稱和提交的值。然後,您可以通過精心設計的HTTP POST請求和異步使用一個類如HttpClient提交。

+0

我會更深入地探討你的建議。很高興知道你已經做到了,而且它很有效。我目前只能訪問門戶引擎(管理區域),但不能訪問服務器。這可以通過訪問級別來完成嗎? – Michelle

+0

@Michelle你不需要直接訪問物理服務器就可以實現這個解決方案,但是你需要能夠編寫自定義的.Net代碼並將代碼部署到服務器上。這篇[Kentico 9](https://docs.kentico.com/k9/custom-development/handling-global-events/handling-object-events)KB文章概述瞭如何實現全局鉤子(你只能在代碼中完成)。 – KingOfTheWood