none
Como acessar dados de um usercontrol dentro da masterpage? RRS feed

  • Pergunta

  • Boas senhores, 

    Tenho uma pagina que herda uma MP e dentro desta MP tenho um usercontrol que contém varios labels.

    Preciso pegar o conteúdo dos label na pagina filha...mas estou apanhando da sintaxe do findcontrol....

    Alguém pode dar uma ajuda....

    Uso c#

    t+

    quarta-feira, 7 de março de 2012 14:00

Respostas

  • Caro Nuno, se é unica não sei...mas quero dizer o seguinte....(estou dando manutenção em uma aplicação desenvolvida por terceiro e dentro de padrões). Não tenho documentação, mas esta questão não vem ao caso.

    Tenho que pegar o nome do usuario logado , na tela que estou mexendo o nome se encontra no cabeçalho, por isso acho que seria tranquilo pegar este nome. Dai deram exemplos orientando a alterar o MP o UC. A empresa tem regras para ajustes nos componentes, tb não esta no escopo desta questão discutir sobre isso....Portanto quero dizer se for ajustar outros componentes é melhor eu ir buscar o nome no banco novamente...ok

    é isso valeu...obrigado a todos pela ajuda....

    Sou novo em C# mas logo logo chego la....abs

    • Marcado como Resposta DET1 terça-feira, 13 de março de 2012 19:11
    segunda-feira, 12 de março de 2012 16:24

Todas as Respostas

  • Olá bom dia,

    Para acessar os controles na MP, você pode usar algo do tipo:

            public String Usuario { get; set; }
                Label bemVindo = (Label)Master.FindControl("lblBemVindo");
                bemVindo.Text = String.Format("Olá {0}, seja bem vindo(a)!", Usuario);
                bemVindo.Visible = true;
                Label desCliente = (Label)Master.FindControl("lblCliente");
                desCliente.Text = "Empresa: " + Usuario;
                desCliente.Visible = true;


    • Editado Rafael Reis quinta-feira, 8 de março de 2012 11:09
    quarta-feira, 7 de março de 2012 14:38
  • Obrigado pelo retorno

    Seguindo seu exemplo, no meu caso existe um usercontrol dentro da MP e preciso do conteudo do label que esta dentro do UC.

    quarta-feira, 7 de março de 2012 15:52
  • Certo,

    Neste caso você pode fazer da seguinte maneira:

    1) Definir uma propriedade no seu user control que será acessada na página que ira´mudar o texto:

    public String TextoDesejado { get; set; }

    2) No evento Page_Load do User Control, atribua a propriedade "TextoDesejado" como valor do Text do seu label:

    this.lblTeste.Text = TextoDesejado ;

    3) Na página aspx que vai alterar o código você usa o seguinte código:

    SeuUserControl teste = (SeuUserControl )Master.FindControl("UserControlID");
    teste.Texto = "Texto a ser digitado";


    • Editado Rafael Reis quinta-feira, 8 de março de 2012 11:05
    quarta-feira, 7 de março de 2012 21:44
  • Ora boas,

    esta solução é de fato a abordagem mais linear no entanto trás alguns problemas pois cria uma dependência forte entre controlos.

    Isto porque se dois controlos em camadas diferentes (MasterPage e Page) precisam da mesma informação então é valido assumir que esta informação se enquadra num âmbito superior ao do controlo (talvez da MasterPage ou mesmo da HttpApplication).

    Assumindo que esta informação pode ser agregada na MasterPage podemos optar pela seguinte solução:

    1. criar uma classe BaseMasterPage que expõe a tal propriedade Texto e é responsável por obter o seu valor (exemplo: extrair de Resources ou BD)
    2. alterar a MasterPage para herdar de BaseMasterPage
    3. adicionar a propriedade Texto ao UserControl
    4. no Load da MasterPage fazer set à propriedade UserControl.Texto = this.Texto
    5. Alterar a aspx para conter a seguinte instrução <%@ MasterType TypeName="NamespaceCompleto.BaseMasterPage" %>
    6. Para obter o valor da propriedade Texto da MasterPage na Page bastará agora fazer this.Master.Texto

    Repara que esta abordagem não implica usar o FindControl e isso é muito bom na perspectiva da performance. Como lado negativo obriga a que as MasterPage herdem sempre da BaseMasterPage (na maioria dos cenário isto acaba por não ser um problema e pode até ser considerado um beneficio pois cria um desacoplamento entre lógica da aplicação e layout).


    Nuno Gomes http://nunogomes.net

    quinta-feira, 8 de março de 2012 01:34
  • vc tb pode fazer propriedades para que vc tb possa ter esse tipo de problema

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    quinta-feira, 8 de março de 2012 10:57
    Moderador
  • Senhores, obrigado....mas so quero ler o conteudo de um label....que UC dentro de uma MP

    :-)

    quinta-feira, 8 de março de 2012 13:01
  • OLá DET1,

    Acredito que com as informações acima você tenha todas as possibilidades para ler o conteúdo do seu label.

    Qual seria a sua dificuldade agora?

    quinta-feira, 8 de março de 2012 14:17
  • A duvida é somente a sintaxe correta para pegar o conteúdo de um label que esta dentro do UC que esta dentro da MP.

    A informação que quero pegar é o  nome do usuário logado que esta no cabeçalho da pagina.

    Se eu tiver que alterar mp ou uc é mais fácil estanciar novamente o objeto que contem o nome do usuário.

    Mas acredito que seja possível pegar o conteúdo que já esta na pagina. 

    O primeiro exemplo entendi que o  label esta dentro da MP e não dentro de UC dento da MP

    Label bemVindo = (Label)Master.FindControl("lblBemVindo"); 

    Estou tentando achar a forma de acrescentar a esta sintaxe o UC.

    É isso....

    t+

    quinta-feira, 8 de março de 2012 21:31
  • Olá DET1,

    Se a unica maneira de pegar o nome do usuário logado na sua aplicação é ler a propriedade de outro controlo então algo está errado na sua aplicação.

    A forma correcta é obter o utilizador num controlo é usar this.Page.User.Name. Para que esta forma funcione é necessário que no processo de autenticação tenha sido criado correctamente um IPrincipal com o IIdentity respectivo.

    Se usares as formas de autenticação disponibilizadas pelo ASP.NET então não deverás ter problemas em usar esta forma.


    Nuno Gomes http://nunogomes.net

    segunda-feira, 12 de março de 2012 15:48
  • Caro Nuno, se é unica não sei...mas quero dizer o seguinte....(estou dando manutenção em uma aplicação desenvolvida por terceiro e dentro de padrões). Não tenho documentação, mas esta questão não vem ao caso.

    Tenho que pegar o nome do usuario logado , na tela que estou mexendo o nome se encontra no cabeçalho, por isso acho que seria tranquilo pegar este nome. Dai deram exemplos orientando a alterar o MP o UC. A empresa tem regras para ajustes nos componentes, tb não esta no escopo desta questão discutir sobre isso....Portanto quero dizer se for ajustar outros componentes é melhor eu ir buscar o nome no banco novamente...ok

    é isso valeu...obrigado a todos pela ajuda....

    Sou novo em C# mas logo logo chego la....abs

    • Marcado como Resposta DET1 terça-feira, 13 de março de 2012 19:11
    segunda-feira, 12 de março de 2012 16:24