【问题标题】:Sitecore WFFM - Preload form with data from SessionSitecore WFFM - 使用 Session 中的数据预加载表单
【发布时间】:2013-01-26 09:27:07
【问题描述】:

我正在尝试在 Sitecore 中创建一个 WFFM 表单来编辑当前用户的配置文件,该配置文件存储在 Session 中(不同于 Sitecore.Context.User.Profile)。为此,我正在寻找一种使用 Session 中的配置文件数据预加载表单字段的方法。

这可以吗?我正在使用 Sitecore CMS 6.5 和 WFFM 2.3。

【问题讨论】:

    标签: c# .net sitecore sitecore6 web-forms-for-marketers


    【解决方案1】:

    WFFM 无法立即执行此操作。我们选择了另一种方法来解决问题。在/sitecore/layout/Renderings/Modules/Web Forms for Marketers/Form 下的表单呈现中,您有Parameters 字段,您可以在其中添加参数FormTemplate,并使用自定义用户控件来呈现表单:

    FormTemplate=/sitecore modules/web/Web Forms for Marketers/Control/CustomSimpleFormAscx.ascx
    

    在这个用户控件中,我们循环遍历每个字段并根据用户的自定义属性设置输入字段的值。当然,您可以将其增强到其他字段,例如 select 等。这是一些示例代码:

    public partial class CustomSimpleFormAscx : SitecoreSimpleFormAscx
    {
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
    
            FillInUserData(this.FieldContainer);
        }
    
        private void FillInUserData(System.Web.UI.Control control)
        {
            foreach (System.Web.UI.Control child in control.Controls)
            {
                if (child is BaseControl)
                {
                    if (child is InputControl)
                    {
                        InputControl field = (InputControl)child;
                        field.Text = Sitecore.Context.User.Profile.GetCustomProperty(field.ControlName);
                    }
                }
    
                FillInUserData(child);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我建议您反编译 FormRenderer WebControl 并构建自己的来执行此操作。这是通过 WFFM 模块呈现表单的标准演示控件。

      【讨论】:

      • 谢谢,马克,看来反编译毕竟是要走的路,但不是这个类。请参阅下面的答案。
      【解决方案3】:

      似乎问题的解决方案涉及更多。首先,我将会话中的所有个人资料信息移至Sitecore.Context.UserProfile。为此,必须实现自定义用户配置文件类。使用这种方法,我知道需要从这个自定义配置文件而不是会话预加载表单字段。

      为此,我在内容树下创建了一个名为“配置文件变量”的文件夹,它以点表示法表示需要读取的自定义配置文件属性。例如:{ DisplayName: "Home Telephone", Value: "ContactDetails.HomeTelephone" }

      最后,我基于单行文本字段类型创建了一个自定义 WFFM 字段类型,该类型还有一个属性 PreloadField,从“配置文件变量”节点和自定义字段类型的 @987654325 中获取值@ 我使用反射从上下文用户的配置文件中读取存储在PreloadField 中的属性值,并将文本字段的Text 属性设置为该值。

      希望这有助于其他人寻找类似的东西。

      【讨论】:

        【解决方案4】:

        我想做类似的事情。在 WFFM 的 2.3 版本中,有一些规则操作允许您从用户配置文件中设置字段的值。

        查看操作:使用用户配置文件特定字段选项中的默认值,直到您选择表单字段时的规则。

        您可以使用全名、电子邮件、评论或任何其他自定义属性。

        未包含的一个字段是 UserName 字段。您可以编写自定义操作返回用户名字段。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多