Pergunta

Eu criei 2 controles para manipular um objeto de dados:1 para visualizar e outro para edição.

Em uma página que carregar o "modo de exibição" UserControl e passar os dados para o desta forma:

ViewControl control = (ViewControl)LoadControl("ViewControl.ascx");
control.dataToView = dataObject;
this.container.Controls.Add(control);

Isso é tudo muito bem e dentro do controle eu posso pegar os dados e exibi-lo.

Agora eu estou tentando seguir uma abordagem semelhante para a edição.Eu tenho um Usuário diferente de Controle para este (com algumas caixas de texto para edição) para que eu passar os dados originais, da mesma forma que eu fiz para o modo de exibição:

EditControl control = (EditControl)LoadControl("EditControl.ascx");
control.dataToEdit = dataObject;
this.container.Controls.Add(control);

O que também funciona bem.

O problema agora está chegando a esses dados.Quando o usuário clica em um botão que eu precisa para obter os dados que foi editada e fazer coisas com ele.O que acontece é que uma vez que os controlos estão sendo adicionados por meio de programação, os dados que o usuário alterou não parecem ser acessíveis em qualquer lugar.

Existe uma solução para isso?Ou é uma forma de tentar manter as coisas separadas e possivelmente re-utilizável não é possível?

Obrigado antecipadamente.

Foi útil?

Solução 3

Aqui está a minha solução:

Na página, manter uma referência para o controle que é carregado por meio de programação.No controle, eu criei um GetData() método que retorna um objeto com os dados inseridos pelo usuário.Quando o usuário submete o formulário, a página chama o GetData() método de controle para acessar os dados que o usuário digitou.

Outras dicas

Basta manter uma referência para o controle como uma variável na página code-behind.I. e.

private EditControl control;

protected void Page_Init(object sender, EventArgs e)
{
   control = (EditControl)LoadControl("EditControl.ascx");
   control.dataToEdit = dataObject;
   this.container.Controls.Add(control);
}

protected void Button_Click(object sender, EventArgs e)
{
   var dataToEdit = control.dataToEdit; 
}

Enquanto você está criando o controle na parte direita da página do ciclo de vida (Inicialização), em seguida, ViewState será mantida.Eu estou supondo que dataToEdit é apenas um TextBox ou algo assim?

Controles criados dinamicamente deve ser adicionado em Init ou PreInit evento na página.

Você tem que fazê-lo aqui, porque os controles do estado ainda não está carregado.Se você adicionar o controle DEPOIS que você vai tê-los vazios desde que a página já preenchido página de controle de valores cedo no ciclo de vida da página.

Mais informações sobre o ciclo de vida página aqui

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