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?

È stato utile?

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) );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top