Kentico表单 - 编辑表单操作和字段名称

时间:2017-01-11 18:11:02

标签: kentico

我有一个Kentico内置的表单,想要将表单操作更改为指向营销自动化供应商网站(eloqua)来处理表单。我注意到没有办法改变Form应用程序上的Action,所以我想用js动态替换动作。我不确定它是否会起作用,但我遇到的另一个直接问题是Kentico生成的字段名称/ ID是如此之长(> 70个字符 - 例如p$lt$ctl02$pageplaceholder$p$lt$ctl03$On_lineForm$viewBiz$Company$txtText)并超出了供应商允许的长度。有没有办法缩短这些名字/ ID?

澄清一下,我需要编辑名称的原因是因为供应商允许将html名称映射(复制/粘贴)到它正在使用的名称。我尝试从一个Kentico字段粘贴整个字符串并得到超出字符限制的错误消息。

3 个答案:

答案 0 :(得分:1)

问题的第一部分,我如何指示表单提交到另一个站点?

在ASP.Net中,唯一的方法是使用javascript来改变动作网址。既然你想要在编辑它时要小心,我会用jQuery替换你的表单上的“提交”按钮,用javascript函数在提交之前改变表单(这样你就不会搞砸其他回发)

$("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();

答案 1 :(得分:1)

正如@ trevor-j-fayas指出的那样,您可以使用javascript将表单操作指向另一个网址。虽然这确实有效,但您可能最终会编写大量的javascript,不仅要将表单指向新的URL,还要在将其发送到目标之前进行一些数据按摩(更改id,进行URL格式化等)。

此外,您将失去使用Kentico表单的一些好处,因为数据实际上从未实际提交回Kentico,例如电子邮件警报。

我曾经在类似的情况下工作,我们将数据发送到Eloqua,但我们不是在客户端进行,而是使用以下任一方式从服务器进行:

  • BizForm控件本身的OnOnAfterSave事件
  • 全局BizForm提交挂钩BizFormInfo.TYPEINFO.Events.Insert.After

表单提交给Kentico后,我们的自定义钩子代码会运行,将数据发送到Eloqua。在任一钩子中,您都可以完全访问表单元数据,字段名称和提交的值。然后,您可以使用HttpClient等类来制作HTTP POST请求并异步提交。

答案 2 :(得分:0)

从架构的角度来看,这不是一个好主意,如果不在供应商网站安全性中打开一个巨大的漏洞,很可能无法工作。首先,如果他们不知道字段名称,如果表单字段改变等,他们将如何处理来自。其次,你会遇到麻烦,试图将一个网站提交到另一个网站等等。如果供应商网站没有响应等 您需要做的是将表单提交回kentico网站,即在kentico网站上处理它,并将结果发送到营销自动化供应商网站(现在简单的方法),并将用户重定向到供应商网站。

重定向和电子邮件 - 您可以在没有任何编程的情况下开箱即用。实际上要完成以上所有操作都不需要编程,您可以获得Kentico网站上记录的所有信息。