I controlli non vengono visualizzati nel controllo utente creato dinamicamente
-
02-07-2019 - |
Domanda
Ho il controllo utente chiamato DateTimeUC che ha due caselle di testo nel suo markup:
<asp:TextBox ID="dateTextBox" runat="server"></asp:TextBox>
<asp:TextBox ID="timeTextBox" runat="server"></asp:TextBox>
Sto creando dinamicamente questo controllo in un altro controllo utente:
Controls.Add(GenerateDateTime(parameter));
private DateTimeUC GenerateDateTime(SomeParameter parameter)
{
DateTimeUC uc = new DateTimeUC();
uc.ID = parameter.Name;
return uc;
}
Ma quando visualizzo la pagina, DateTimeUC non esegue il rendering. L'ho controllato in questo modo:
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
StringBuilder builder = new StringBuilder();
StringWriter swriter = new StringWriter(builder);
HtmlTextWriter hwriter = new HtmlTextWriter(swriter);
base.Render(hwriter);
string s = builder.ToString();
}
s è vuoto e Controls.Count è 0. Cosa sto facendo di sbagliato?
Soluzione
Devi utilizzare il metodo LoadControl (" your_user_control_app_relative_path.ascx ")
invece di " DateTimeUC uc = new DateTimeUC (); "
Altri suggerimenti
Mi sono imbattuto in questo problema da solo un po 'di tempo fa. È necessario utilizzare il metodo LoadControl (). Dai un'occhiata a questa pagina su di essa.
Penso che tu voglia aggiungere il tuo controllo al modulo della pagina & amp; non il modulo stesso.
il tuo codice:
Controls.Add( GenerateDateTime(parameter) );
Prova:
Page.Form.Controls.Add( GenerateDateTime(parameter) );