Хорошо, я исправил это вот решение, которое я использовал:
В файле MyUserConstrol.ascx я поместил заполнитель, где я хотел, чтобы innerHTML показывал:
<asp:PlaceHolder runat="server" ID="plhContent" />
Затем в файле MyUserControl.ascx.cs я добавил эти атрибуты в класс:
[ParseChildren(false)]
[PersistChildren(true)]
И я добавил в файл это:
public void RegisterUpdatePanel(UpdatePanel panel)
{
MethodInfo m =
(from methods in typeof (ScriptManager).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)
where methods.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel")
select methods).First();
m.Invoke(ScriptManager.GetCurrent(Page), new object[] {panel});
}
protected override void CreateChildControls()
{
for (int i = 0; i < Controls.Count; i++)
if (Controls[i] is MyLastControl)
while (i + 2 < Controls.Count)
{
// In cas there is an updatepanel in the control we are moving
// We are registering an event to register the updatepanel
// to the scriptmanager again
SearchUpdatePanel(Controls[i + 2]);
plhContent.Controls.Add(Controls[i + 2]);
}
base.CreateChildControls();
}
private void SearchUpdatePanel(Control control)
{
if (control is UpdatePanel)
control.Unload += updPnl_Unload;
foreach (Control childcontrol in control.Controls)
SearchUpdatePanel(childcontrol);
}
protected void updPnl_Unload(object sender, EventArgs e)
{
RegisterUpdatePanel((UpdatePanel) sender);
}
Обратите внимание, что я назвал свой последний элемент управления в файле ascx myLastContol, чтобы узнать, каким был элемент управления до внедрения innerHTML, поскольку я не знаю, что я получаю. Процедура в основном говорит loop в элементах управления в UserControl, когда вы достигнете конца UserControl, все после является innerHTML от родительского, поэтому возьмите их и переместите их в заполнитель, где я хочу их.
Надеюсь, это кому-нибудь поможет.
Вот несколько источников, которые я использовал для достижения своей цели:
Регистрация UpdatePanel