gpt4 book ai didi

sitecore - WFFM 覆盖演示详细信息中选择的 FormID

转载 作者:行者123 更新时间:2023-12-02 19:19:02 24 4
gpt4 key购买 nike

在某种情况下,我需要以编程方式更改表单渲染器中呈现的 WFFM 表单。表单渲染器本身通过演示详细信息添加到占位符。

我能够访问表单渲染器并设置 FormID 并将其参数更新为我想要显示的表单的 ID。然而,即使我在页面生命周期的早期移动代码,Sitecore 也不会尊重这些属性并显示原始表单。 Page_Init。我的代码如下

    // Pass in controls of the sublayout
public FormRender SetFormRender(Control control, string dataSource)
{
FormRender formRender = null;

// loop through controls contained in passed in control
foreach (Control child in control.Controls)
{
if (child is FormRender)
{
formRender = child as FormRender;
if (formRender != null)
{
formRender.FormID = dataSource;
formRender.Parameters = "FormID=" + HttpUtility.HtmlEncode(dataSource);
break;
}
}

// If control has controls pass to this method for recursion
if (control.HasControls())
{
var nestedFormRender = SetFormRender(child, dataSource);
if (nestedFormRender != null && formRender == null)
{
formRender = nestedFormRender;
break;
}

}
}

return formRender;
}

最佳答案

也许在设置了 FormID 和 Parameter 之后,您需要调用 FormRender.OnInit(),因此您的代码可能如下所示:

....
formRender.FormID = dataSource;
formRender.Parameters = "FormID=" + HttpUtility.HtmlEncode(dataSource);
formRender.OnInit(null);
break;
....

编辑

我认为您不能从代码中调用 formRender.OnInit() 作为其 protected 方法,但您可以做的是创建一个继承 FormRender 的新控件,并用它替换演示细节上的控件,然后覆盖OnInit() 方法并放置处理 FormID 属性的代码,然后调用 base.OnInit()

Mike Reynolds 有一篇关于如何根据查询字符串加载不同表单的博客 here

关于sitecore - WFFM 覆盖演示详细信息中选择的 FormID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30918091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com