Насколько я знаю, невозможно выполнять события при динамическом рендеринге элементов управления. Но у меня есть хитрость в рендеринге пользовательских элементов управления, которая работает.
Я использую функцию для визуализации пользовательского элемента управления, который принимает физический путь пользовательского элемента управления, и список свойств. Я определяю специальное свойство в пользовательском элементе управления, которое может быть похоже на метод, и когда я его устанавливаю, запускаю свой пользовательский код. Это функция рендеринга:
public static string RenderUserControl(string path, List<KeyValuePair<string, object>> properties)
{
Page pageHolder = new Page();
UserControl viewControl = (UserControl)pageHolder.LoadControl(path);
viewControl.EnableViewState = false;
Type viewControlType = viewControl.GetType();
foreach (var pair in properties)
{
PropertyInfo property = viewControlType.GetProperty(pair.Key);
if (property != null)
{
property.SetValue(viewControl, pair.Value, null);
}
}
HtmlForm f = new HtmlForm();
f.Controls.Add(viewControl);
pageHolder.Controls.Add(f);
StringWriter output = new StringWriter();
HttpContext.Current.Server.Execute(pageHolder, output, false);
return (output.ToString());
}
В пользовательском элементе управления, который требуется визуализировать, определите свойство, например, RunMyCode
установите любое свойство, которое вы хотите, и, наконец, добавьте специальное свойство, которое вы определяете.
data.Add(new KeyValuePair<string, object>("RunMyCode", SomeDataOrNothing));
В событии рендеринга пользовательского элемента управления вы можете проверить значение свойства RunMyCode
и, если оно установлено, вручную вызвать методы, которые обычно вызывают события.