【问题标题】:Add hidden field at runtime在运行时添加隐藏字段
【发布时间】:2015-08-24 09:56:00
【问题描述】:

在 Sitecore WFFM(面向营销人员的 Web 表单)中 - 我们可以在运行时添加隐藏字段 - 即在提交操作时并为隐藏字段分配一些值。 如果表单出现异常并且用户重新提交表单,我也想重用这个值。

产品详情 - 7.2 rev。 141226,面向营销人员的 Web 表单 2.4 rev.140117

【问题讨论】:

    标签: sitecore sitecore7 web-forms-for-marketers


    【解决方案1】:

    非常简单,您可以像这样创建隐藏字段(当然,您可以为隐藏字段提供替代和更复杂的定制行为):

    public class HiddenField : SingleLineText
    {
        protected override void DoRender(System.Web.UI.HtmlTextWriter writer)
        {
            this.textbox.Parent.Parent.Visible = false;
            base.DoRender(writer);
        }
    }
    

    下一步,您需要向 WFFM 注册该字段。为此,只需为您的新字段创建一个项目:

    /sitecore/system/Modules/Web Forms for Marketers/Settings/Field Types/Custom/Hidden Field
    

    在该项目中,您可以为该隐藏字段指定程序集和类名称,这是 Sitecore 非常常用的方法。

    到目前为止,一切都很好。现在您可以像其他人一样使用您的隐藏字段,包括以编程方式添加它们。

    附:不幸的是,我目前没有以编程方式添加字段的代码示例。但是,您可以尝试使用 Reflector、dotPeek 或任何其他反汇编工具自行查找。库应该已经在您的 \bin 文件夹中,名为 Sitecore.Forms.Core.dll

    【讨论】:

    • 嘿@Martin Miles。上述方法的问题是我们如何在下面的方法中提交操作后向隐藏字段添加值 - public void Submit(ID formid, AdaptedResultList fields) 问题是我们只能读取添加到表单的字段的值,我们不是能够更新它。 foreach (AdaptedControlResult result in fields) { // 访问隐藏字段并尝试更新。 // result.Value 只是只读的,不能更新 }
    • 所以我的要求是 1)在表单抛出异常之前向隐藏字段或视图状态(不是会话)添加一些值。 2)一旦用户重新提交表单 - 我需要访问上述保存的值。
    • 所以你想在按钮点击后添加隐藏字段,但在它进入服务器之前?还是别的什么?您能否在更高的层次上描述您的目标,以便我了解您为什么需要这种行为?您是否尝试创建多步骤 WFFM?
    • 我的基本意图如下 - 1)在表单提交上 - 在我调用 Rest API 的地方调用自定义操作。 2) 如果上面的 API 返回 false,我会向用户抛出一个带有消息的异常以再次尝试,并且用户将返回到 Form 并保留值。在这种情况下,我想将 GUID 保存在一些临时变量中。 3) 用户可以重新提交——我想访问步骤 2 中保存的 GUID 并编写一些逻辑。到目前为止,我已经使用 HttpContext.Current.Session["SesionGUID"] 来解决我的目的。但我想摆脱 Session我在想是否可以使用隐藏字段、VieState 等来解决我的目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    相关资源
    最近更新 更多