Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sitecore WFFM-使用会话中的数据预加载表单_C#_.net_Sitecore_Sitecore6_Web Forms For Marketers - Fatal编程技术网

C# Sitecore WFFM-使用会话中的数据预加载表单

C# Sitecore WFFM-使用会话中的数据预加载表单,c#,.net,sitecore,sitecore6,web-forms-for-marketers,C#,.net,Sitecore,Sitecore6,Web Forms For Marketers,我正在尝试在Sitecore中创建WFFM表单以编辑当前用户的配置文件,该配置文件存储在会话中(不同于Sitecore.Context.user.profile)。为此,我正在寻找一种方法,用会话中的概要文件数据预加载表单字段 这能做到吗?我正在使用Sitecore CMS 6.5和WFFM 2.3。我建议您反编译FormRenderer网络控件,并构建自己的网络控件。这是通过WFFM模块呈现表单的标准表示控件。问题的解决方案似乎更复杂一些。首先,我将所有配置文件信息从会话移动到Sitecore

我正在尝试在Sitecore中创建WFFM表单以编辑当前用户的配置文件,该配置文件存储在会话中(不同于
Sitecore.Context.user.profile
)。为此,我正在寻找一种方法,用会话中的概要文件数据预加载表单字段


这能做到吗?我正在使用Sitecore CMS 6.5和WFFM 2.3。

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

问题的解决方案似乎更复杂一些。首先,我将所有配置文件信息从会话移动到
Sitecore.Context.User
profile
。为此,必须实现一个自定义用户配置文件类。使用这种方法,我知道需要从这个定制概要文件而不是会话中预加载表单字段

为此,我在内容树下创建了一个名为“Profile Variables”的文件夹,它以点表示法表示需要读取的自定义概要文件属性。例如:
{DisplayName:“家庭电话”,值:“ContactDetails.homephone”}

最后,我基于单行文本字段类型创建了一个自定义WFFM字段类型,该字段类型接受另一个属性,
prelofield
,从“Profile Variables”节点获取值,在自定义字段类型的
OnInit
上,我使用反射从上下文用户的配置文件中读取存储在
prelofield
中的属性值,并将文本字段的
text
属性设置为该值


希望这能帮助其他人寻找类似的东西。

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

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

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

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


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

谢谢,Mark,看来反编译毕竟是一种方法,但不是这个类。见下面我的答案。