Sitecore WFFM - 使用Session中的数据预加载表单

时间:2013-01-26 09:27:08

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

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

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

4 个答案:

答案 0 :(得分:3)

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);
        }
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

为此,我在内容树下创建了一个名为“Profile Variables”的文件夹,它以点表示法表示需要读取的自定义配置文件属性。例如:Profile

最后,我创建了一个基于单行文本字段类型的自定义WFFM字段类型,它采用了另一个属性{ DisplayName: "Home Telephone", Value: "ContactDetails.HomeTelephone" },从“配置文件变量”节点获取值,并在自定义字段类型上PreloadField我使用反射来查看上下文用户的配置文件中存储在OnInit中的属性的值,并将文本字段的PreloadField属性设置为该值。

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

答案 3 :(得分:0)

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

请参阅操作:使用特定于用户配置文件字段选项的默认值,直到选择表单字段时的规则。

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

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