Pergunta

Por favor, perdoe o código PSUDO, mas é uma pergunta simples:

Eu crio um controle do usuário (MyControlBase: UserControl) com uma caixa de texto (id = "txtbox") na marcação. Em seu código, escrevo um método SayHello (String s) {txtbox.text = s; }.

Crio outro controle de usuário que estende o MyControlBase (MyControl: MyControlBase). Em Page_load deste controle filho, eu chamo Sayhello ("Hello"); e receba um erro de tempo de execução me dizendo que o TXTBox é nulo (ainda não foi criado obviamente).

Como então, posso herdar de um controle do usuário e fazer com que meus controles de filho acessem a marcação do controle de base? Tentei ler o ciclo de vida do evento para esses controles, mas acho que não estou conseguindo.

Alguma ideia?

-editar-

Sinto muito, é asp.net. Se esse código tornar mais claro, devo ter feito um trabalho muito ruim ao descrever o problema.

O TXTBox é um controle ASP: TextBox que existe na marcação do MyControlBase.

public partial class myControlBase : System.Web.UI.UserControl
{
  protected void SayHello(string s){
    txtBox.Text = s;
  }
}

public partial class myControl: myControlBase
{
    protected void Page_Load(object sender, EventArgs e)
    {
      SayHello("hello");
    }
}

Isso falharia em Sayhello ("Olá"); Porque o txtbox retornou nulo.

Foi útil?

Solução

Eu entendo o problema agora, mas não tenho uma boa solução.

Quando você estende um controle do usuário como esse, perde completamente o acesso à marcação do controle base. O Page_Load da criança é chamado antes (possivelmente em vez de?) A Page_load do Controle Base.

Outras dicas

Além de métodos como Page_Load, há o On* métodos, como OnInit e OnLoad. Estes são métodos virtuais, portanto, podem ser substituídos pelo seu controle de usuário derivado.

public override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    SayHello("hello");
}

Parece que o CreateChildControls ainda não foi chamado.

Tente adicionar EnsureChildControls () em Page_load, ou ligue para o Sayhello do evento Onprender.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top