Pergunta

Eu tenho o controle usuário chamado DateTimeUC que tem duas caixas de texto em seu marcação:

<asp:TextBox ID="dateTextBox" runat="server"></asp:TextBox>
<asp:TextBox ID="timeTextBox" runat="server"></asp:TextBox>

Eu estou criando dinamicamente este controle em outro controle de usuário:

Controls.Add(GenerateDateTime(parameter));
private DateTimeUC GenerateDateTime(SomeParameter parameter)
{
    DateTimeUC uc = new DateTimeUC();
    uc.ID = parameter.Name;
    return uc;
}

Mas quando eu processar a página, DateTimeUC torna nada. Eu verifiquei isto assim:

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 está vazio e Controls.Count é 0. O que estou fazendo de errado?

Foi útil?

Solução

Você deve usar o método LoadControl( "your_user_control_app_relative_path.ascx" ) em vez de "DateTimeUC uc = new DateTimeUC ();"

Outras dicas

Eu corri para este problema sozinho uma volta enquanto. Você precisa usar o método LoadControl (). Confira desta página nele.

Eu acho que você quer adicionar seu controle para o da página de formulário e não o próprio formulário.

seu código:

Controls.Add( GenerateDateTime(parameter) );

tentar:

Page.Form.Controls.Add( GenerateDateTime(parameter) );
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top