2017-01-11 38 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