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

Kentico表单-编辑表单操作和字段名称,kentico,Kentico,我在Kentico中构建了一个表单,希望更改表单操作以指向营销自动化供应商网站(eloqua)来处理表单。我注意到表单应用程序上的操作无法更改,因此我考虑使用js动态替换该操作。我不确定它是否有效,但我面临的另一个直接问题是Kentico生成的字段名/id太长(>70个字符-例如,p$lt$ctl02$pageplaceholder$p$lt$ctl03$On_lineForm$viewBiz$Company$txtText),超过了供应商允许的长度。有没有办法缩短这些名称/ID 为了澄清,我之

我在Kentico中构建了一个表单,希望更改表单操作以指向营销自动化供应商网站(eloqua)来处理表单。我注意到表单应用程序上的操作无法更改,因此我考虑使用js动态替换该操作。我不确定它是否有效,但我面临的另一个直接问题是Kentico生成的字段名/id太长(>70个字符-例如,
p$lt$ctl02$pageplaceholder$p$lt$ctl03$On_lineForm$viewBiz$Company$txtText
),超过了供应商允许的长度。有没有办法缩短这些名称/ID


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

从体系结构的角度来看,这不是一个好主意,如果不在他们的供应商网站安全性上打开一个大漏洞,很可能无法工作。首先,如果他们不知道字段名称,如果表单字段发生变化,他们将如何处理from。其次,在尝试将表单从一个站点提交到另一个站点等时,您将遇到麻烦。如果供应商站点没有响应,该怎么办。 您需要做的是将表单提交回kentico网站,即在kentico网站上处理表单,并将结果发送电子邮件通知到营销自动化供应商网站(目前最简单的方法),并将用户重定向到供应商网站


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

从架构的角度来看,这不是一个好主意,如果不打开供应商网站安全性的一个大漏洞,很可能无法工作。首先,如果他们不知道字段名称,如果表单字段发生变化,他们将如何处理from。其次,在尝试将表单从一个站点提交到另一个站点等时,您将遇到麻烦。如果供应商站点没有响应,该怎么办。 您需要做的是将表单提交回kentico网站,即在kentico网站上处理表单,并将结果发送电子邮件通知到营销自动化供应商网站(目前最简单的方法),并将用户重定向到供应商网站


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

问题的第一部分,我如何引导表单提交到其他网站

在ASP.Net中,唯一的方法是使用javascript更改的操作url。由于您希望在编辑时小心,我将使用jQuery将表单上的“提交”按钮替换为javascript函数,该函数将在提交之前更改表单(这样您就不会弄乱其他回发)

下一个问题是更改字段名。如果表单元素ID必须小于70个字符,则必须再次使用Javascript,这样会破坏元素的任何回发相关功能,因此在执行此操作之前,请确保表单是“原样”的

同样存在安全问题,因为当您发布到另一个位置时,您将发送所有数据,包括包含ViewState等的隐藏asp.net输入。在提交任何不希望发送到其他站点的字段之前,您可能需要花时间“删除”

类似这样的东西(不过先测试一下)


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

在ASP.Net中,唯一的方法是使用javascript更改的操作url。由于您希望在编辑时小心,我将使用jQuery将表单上的“提交”按钮替换为javascript函数,该函数将在提交之前更改表单(这样您就不会弄乱其他回发)

下一个问题是更改字段名。如果表单元素ID必须小于70个字符,则必须再次使用Javascript,这样会破坏元素的任何回发相关功能,因此在执行此操作之前,请确保表单是“原样”的

同样存在安全问题,因为当您发布到另一个位置时,您将发送所有数据,包括包含ViewState等的隐藏asp.net输入。在提交任何不希望发送到其他站点的字段之前,您可能需要花时间“删除”

类似这样的东西(不过先测试一下)


正如@trevor-j-fayas指出的,您可以使用javascript将表单操作指向另一个url。虽然这确实有效,但您可能会编写大量javascript,不仅将表单指向新的url,而且在将表单发送到目标之前还要进行一些数据处理(更改id、进行url格式设置等)

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

我曾经在一个类似的场景中工作过,我们将数据发送到Eloqua,但我们没有在客户端执行,而是使用以下任一方式从服务器执行:

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

表单提交给Kentico后,我们的自定义钩子代码将运行,并将数据发送给Eloqua。在任一钩子中,您都可以完全访问表单元数据、字段名和提交的值。然后,您可以创建一个HTTP POST请求,并使用类(如
HttpClient

)异步提交它。正如@trevor-j-fayas指出的,您可以使用javascript将表单操作指向另一个url。虽然这确实有效,但您可能会编写大量javascript,而不仅仅是将表单指向一个ne
$("button.MySubmitButton").click(function() {
   $("form").attr("action", "http://TheVendor.com/PostLocation");
});
$("input:not(id*='txtName'):not(id*='txtEmail'),select:not(id*='ddlQuestion')").remove();