Kentico 表单 - 编辑表单操作和字段名称
Kentico Form - Edit Form Action and Field Names
我有一个在 Kentico 中构建的表单,我想更改表单操作以指向营销自动化供应商网站 (eloqua) 来处理该表单。发现 Form app 上的 Action 是没办法改变的,于是想到了用 js 来动态替换 action。我不确定它是否有效,但我遇到的另一个直接问题是 Kentico 生成的字段 name/id 太长(> 70 个字符 - 例如 p$lt$ctl02$pageplaceholder$p$lt$ctl03$On_lineForm$viewBiz$Company$txtText
)并且超过了小贩。有没有办法缩短那些 names/ids?
澄清一下,我需要编辑名称的原因是供应商允许将 (copy/paste) html 名称映射到它正在使用的任何名称。我尝试从一个 Kentico 字段粘贴整个字符串,但收到超出字符限制的错误消息。
从体系结构的角度来看这不是一个好主意,如果不在他们的供应商网站安全性中打开一个巨大的漏洞,很可能无法工作。首先,如果他们不知道字段名称,他们将如何处理发件人,如果表单字段发生变化怎么办等等。其次,您将 运行 陷入麻烦,试图将表单提交到另一个网站等. 如果供应商站点没有响应等怎么办?
您需要做的是将表格提交回 kentico 网站,即在 kentico 网站上处理它,并将包含结果的电子邮件通知发送到营销自动化供应商网站(目前最简单的方法)并将用户重定向到供应商网站。
重定向和电子邮件 - 您可以开箱即用,无需任何编程。实际上,以上所有操作都不需要编程,您可以在您的 Kentico 网站上获得所有记录的信息。
问题的第一部分,如何指示表单提交到另一个站点?
在 ASP.Net 中,唯一的方法是使用 javascript 改变 的动作 url。由于您想在编辑时小心,我会使用 jQuery 将表单上的 "Submit" 按钮替换为 javascript 函数,该函数会在提交前更改表单(这样您就不会不要搞砸其他 postbacks)
$("button.MySubmitButton").click(function() {
$("form").attr("action", "http://TheVendor.com/PostLocation");
});
下一个问题是更改字段名称。如果您绝对必须让表单元素 ID 小于 70 个字符,则您将不得不再次使用 Javascript,这将破坏元素的任何 postback-related 功能,因此请确保表单在 "as is" 之前正在做。
再次存在安全问题,因为当您 post 到另一个位置时,您将发送所有数据,包括包含视图状态等的隐藏 asp.net 输入。在提交您不想发送到其他站点的任何字段之前,您可能需要花时间 'eliminate'。
类似这样的东西(尽管先测试一下)
$("input:not(id*='txtName'):not(id*='txtEmail'),select:not(id*='ddlQuestion')").remove();
正如@trevor-j-fayas 指出的那样,您可以使用 javascript 将表单操作指向另一个 url。虽然这确实有效,但您最终可能会写很多 javascript,不仅将表单指向新的 url,而且还要进行一些数据处理(更改 ID,进行 url 格式化,等)发送到目标之前。
此外,您失去了使用 Kentico 表单的一些好处,因为数据从未真正提交回 Kentico,例如电子邮件警报。
我曾在类似的场景中工作过,我们将数据发送到 Eloqua,但我们没有在客户端发送数据,而是通过使用以下任一方式从服务器发送数据:
- BizForm 控件本身的
OnOnAfterSave
事件
- 全局BizForm提交挂钩
BizFormInfo.TYPEINFO.Events.Insert.After
表单提交给 Kentico 后,我们的自定义钩子代码运行,将数据发送给 Eloqua。在任一挂钩中,您都可以完全访问表单元数据、字段名称和提交的值。然后您可以制作一个 HTTP POST 请求并使用 class 异步提交它,例如 HttpClient
.
我有一个在 Kentico 中构建的表单,我想更改表单操作以指向营销自动化供应商网站 (eloqua) 来处理该表单。发现 Form app 上的 Action 是没办法改变的,于是想到了用 js 来动态替换 action。我不确定它是否有效,但我遇到的另一个直接问题是 Kentico 生成的字段 name/id 太长(> 70 个字符 - 例如 p$lt$ctl02$pageplaceholder$p$lt$ctl03$On_lineForm$viewBiz$Company$txtText
)并且超过了小贩。有没有办法缩短那些 names/ids?
澄清一下,我需要编辑名称的原因是供应商允许将 (copy/paste) html 名称映射到它正在使用的任何名称。我尝试从一个 Kentico 字段粘贴整个字符串,但收到超出字符限制的错误消息。
从体系结构的角度来看这不是一个好主意,如果不在他们的供应商网站安全性中打开一个巨大的漏洞,很可能无法工作。首先,如果他们不知道字段名称,他们将如何处理发件人,如果表单字段发生变化怎么办等等。其次,您将 运行 陷入麻烦,试图将表单提交到另一个网站等. 如果供应商站点没有响应等怎么办? 您需要做的是将表格提交回 kentico 网站,即在 kentico 网站上处理它,并将包含结果的电子邮件通知发送到营销自动化供应商网站(目前最简单的方法)并将用户重定向到供应商网站。
重定向和电子邮件 - 您可以开箱即用,无需任何编程。实际上,以上所有操作都不需要编程,您可以在您的 Kentico 网站上获得所有记录的信息。
问题的第一部分,如何指示表单提交到另一个站点?
在 ASP.Net 中,唯一的方法是使用 javascript 改变 的动作 url。由于您想在编辑时小心,我会使用 jQuery 将表单上的 "Submit" 按钮替换为 javascript 函数,该函数会在提交前更改表单(这样您就不会不要搞砸其他 postbacks)
$("button.MySubmitButton").click(function() {
$("form").attr("action", "http://TheVendor.com/PostLocation");
});
下一个问题是更改字段名称。如果您绝对必须让表单元素 ID 小于 70 个字符,则您将不得不再次使用 Javascript,这将破坏元素的任何 postback-related 功能,因此请确保表单在 "as is" 之前正在做。
再次存在安全问题,因为当您 post 到另一个位置时,您将发送所有数据,包括包含视图状态等的隐藏 asp.net 输入。在提交您不想发送到其他站点的任何字段之前,您可能需要花时间 'eliminate'。
类似这样的东西(尽管先测试一下)
$("input:not(id*='txtName'):not(id*='txtEmail'),select:not(id*='ddlQuestion')").remove();
正如@trevor-j-fayas 指出的那样,您可以使用 javascript 将表单操作指向另一个 url。虽然这确实有效,但您最终可能会写很多 javascript,不仅将表单指向新的 url,而且还要进行一些数据处理(更改 ID,进行 url 格式化,等)发送到目标之前。
此外,您失去了使用 Kentico 表单的一些好处,因为数据从未真正提交回 Kentico,例如电子邮件警报。
我曾在类似的场景中工作过,我们将数据发送到 Eloqua,但我们没有在客户端发送数据,而是通过使用以下任一方式从服务器发送数据:
- BizForm 控件本身的
OnOnAfterSave
事件 - 全局BizForm提交挂钩
BizFormInfo.TYPEINFO.Events.Insert.After
表单提交给 Kentico 后,我们的自定义钩子代码运行,将数据发送给 Eloqua。在任一挂钩中,您都可以完全访问表单元数据、字段名称和提交的值。然后您可以制作一个 HTTP POST 请求并使用 class 异步提交它,例如 HttpClient
.