Вы должны вызвать Render_Modules в событии init родительской страницы.
Кроме того, вы можете реструктурировать свои базовые / пользовательские классы, чтобы избежать путаницы в порядке выполнения событий, поскольку событие load будет вызываться как в базовом, так и в пользовательских классах.
Каждый раз, когда у нас есть этот тип структуры, мы всегда реализуем метод OnLoad в базовом классе для переопределения наследниками. Таким образом, мы можем точно контролировать, когда логика загрузки выполняется в наследниках.
Обновлено с дополнительной информацией
Вот некоторая дополнительная информация о том, как обрабатывать события загрузки в базовых и дочерних классах.
В webonlinecustombase добавьте следующее:
protected virtual void OnPageLoad() {
}
затем измените событие загрузки страницы, чтобы вызвать этот новый метод в соответствующее время:
public void Page_Load(object sender, EventArgs e)
{
string typeName = custommodule.ModuleInternetFile;
inpagelink.HRef = "#" + custommodule.ModuleName.Replace(" ", "").Replace("/", "");
modtitle.InnerText = custommodule.ModuleName;
Type child = Type.GetType(typeName);
UserControl ctl = (UserControl)Page.LoadControl(child, null);
if (ctl != null)
{
this.modsection.Controls.Add(ctl);
}
// Now let the inheritors execute their code
OnPageLoad();
}
затем в вашем унаследованном классе измените:
protected void Page_Load(object sender, EventArgs e)
до
protected override void OnPageLoad()
Когда я просматривал этот код, я обнаружил, что вы также динамически загружаете элементы управления в webonlinecustombase. Вам нужно будет переместить загрузку элементов управления в событие init, чтобы они правильно работали в стандартной логике страницы.