В определенном сценарии мне нужно программно изменить форму WFFM, представленную в средстве визуализации форм. Сам модуль визуализации формы добавляется к заполнителю через сведения о презентации.
Я могу получить доступ к рендеру формы и установить FormID и обновить его параметры до идентификатора формы, которую я хочу отобразить вместо этого. Однако создается впечатление, что Sitecore не учитывает эти свойства и не отображает исходную форму, даже когда я перемещаю свой код ранее в жизненном цикле страницы, например. Страница_Инит. Мой код выглядит следующим образом
// 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;
}
formRender.DataSource = datasource
? В более новых версиях WFFM произошли изменения, поэтому используются значения источника данных, по крайней мере, для MVC, и они выглядят одинаково для WebForms.FormRender.FormID
также сначала проверяет значение источника данных, а в противном случае использует FormID, установленный вGetRender()
, что может быть слишком поздно, поскольку элемент управления уже инициализирован. - person jammykam   schedule 19.06.2015