none
Campos da MasterPage RRS feed

  • Pergunta

  • A minha aplicação é aberta em uma página default.aspx, que preenche alguns labels na MasterPage, porém ao mudar de página, através do menu, estes dados desaparecem.

    Como fazer para que esses labels não percam seus valores?

    'Preenchendo masterPage.


    CType(Master, ConMAN).preencheCodUsuario = usu
    CType(Master, ConMAN).preencheUsuario = ds.Tables(0).Rows(0)("nom_NomeUsuario") + " " + ds.Tables(0).Rows(0)("nom_Sobrenome")
    CType(Master, ConMAN).preencheMalha = ds.Tables(0).Rows(0)("des_Malha")
    If ds.Tables(0).Rows(0)("num_ID_TipoDeRede") = 1 Then
           CType(Master, ConMAN).preencheRede = "RDA"
    Else
           CType(Master, ConMAN).preencheRede = "RDS"
    End If

    CType
    (Master, ConMAN).idMalha = ds.Tables(0).Rows(0)("num_ID_Malha")
    CType(Master, ConMAN).idPermissao = ds.Tables(0).Rows(0)("num_ID_Permissao")
    CType(Master, ConMAN).idRede = ds.Tables(0).Rows(0)("num_ID_TipoDeRede")

    Sergio Ivanenko
    sábado, 24 de outubro de 2009 03:59

Respostas

  • Olá,

    Faça a consulta, guarde o valor em Session.

    Verifique no page load se os valores são nulos, se são, faça a consulta e guarde na sessão... se não.. recupere da sessão. Depois preencha os labels.

    Ex.: C#

    DadosUsuario.cs

    public class DadosUsuario
    {
    public Nome {get; set;}
    public Cidade {get; set;}
    }

    ---------------------------------------------------------------------------------------
    MasterPage.cs

    DadosUsuario usuario
    {
    get
    {
    ...
    return (DadosUsuario)Session["DadosUsuario"];
    ...
    }
    set
    {
    Session["DadosUsuario"] = value;
    }
    }

    Sub Page_Load()
    {
    if (Session["DadosUsuario"] == null)
    {
    // Realiza consulta.
    // preenche a session com o resultado
    // Ex.: Session["DadosUsuario"] = ConsultaDadosCliente();
    }
    campo1.Text = usuario.Nome;
    campo2.Text = usuario.Cidade;
    ...
    ...
    ...
    }
    Roberto Santos http://blog.robertoosantos.com
    • Marcado como Resposta Ivanenko sábado, 31 de outubro de 2009 14:19
    domingo, 25 de outubro de 2009 11:41
  • Resolvi usando variaveis de sessão.
    Sergio Ivanenko
    • Marcado como Resposta Ivanenko quinta-feira, 29 de outubro de 2009 23:20
    quinta-feira, 29 de outubro de 2009 23:20

Todas as Respostas

  • Fale,

    Na MasterPage coloca seu código dentro do bloco da listagem 1, pois dessa forma você evita que no próximo post da página o conteúdo seja acessado:

    If Not IsPostBack Then     

    End If

    Erysson


    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    sábado, 24 de outubro de 2009 13:05
  • Oi,

    A master page é re-processada a cada página chamada e apenas a página default preenche os labels.

    Faça de forma diferente :

    1) Crie uma classe no app_code, invente um nome, vamos imaginar "Dados"

    2) Crie uma propriedade chamada DadosLabels do tipo dataTable e como readonly

    3) O get da propriedade dadosLabels verifica se já existe em sessão uma variável "dadoslabels"

        Se existe, devolve ela

        Se não existe, lê o datatable do banco, guarda na variável dadoslabels e devolve ela.

    4) No page_load da master page preencha o label utilizando os campos da datatable devolvida pela propriedade DadosLabels da classe Dados.

    []'s
    Dennes
    * Treinamento de ASP.NET 3.5 dia 24/10 - Apenas 12x R$ 70,88 - Inscreva-se em http://www.bufaloinfo.com.br/cursos/aspnet2.asp

    * Treinamento de Introdução a OO e Framework .NET c/C# dia  31/10 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    Tel :  (11) 3170-3056  (21)9240-5134  E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    • Marcado como Resposta Ivanenko domingo, 25 de outubro de 2009 02:18
    • Não Marcado como Resposta Ivanenko domingo, 25 de outubro de 2009 04:21
    sábado, 24 de outubro de 2009 14:38
  • Dennes, fiz assim, porém todas as vezes que mudo de página, efetua nova consulta.

    MasterPage:

    Dim csD As New dadosUsuario
    Private Function carregaDados() As DataTable
    Dim conn As New SqlConnection  

    Dim usu As String = "c035562" 'Right(User.Identity.Name, 7)
    Dim dt As New DataTable
    Dim strSQL As String

    conn.ConnectionString = ConfigurationManager.ConnectionStrings(

    "CaminhoBD").ToString
    strSQL =
    "SELECT TUsuarios.cod_ID_Usuario, TUsuarios.nom_NomeUsuario, TUsuarios.nom_Sobrenome," _
    &
    " TUsuarios.num_ID_Permissao, TUsuarios.num_ID_TipoDeRede, TMalha.des_Malha," _
    &
    " TUsuarioMalha.num_ID_Malha" _
    &
    " FROM TUsuarios INNER JOIN" _
    &
    " TUsuarioMalha ON TUsuarios.cod_ID_Usuario = TUsuarioMalha.cod_ID_Usuario INNER JOIN" _
    &
    " TMalha ON TUsuarioMalha.num_ID_Malha = TMalha.num_ID_Malha" _
    &
    " WHERE (TUsuarios.cod_ID_Usuario = '" & usu & "')" _
    &
    " AND (TUsuarioMalha.tag_MalhaPadrao = 1)" 

    Dim da As New SqlDataAdapter(strSQL, conn)

    da.Fill(dt) 

    If dt.Rows.Count = 0 Then
    MsgBox("Usurio no cadastrado.", MsgBoxStyle.Information, "ConMAN")
    Response.Redirect(
    http://cemignet/)
    End If 

    Return dt

     

     

    End Function

    Protected
    Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If
    Not IsPostBack Then
    csD.dtLabels = carregaDados()
    End If

     valorLabels() 

    End Sub

     

    Private Sub valorLabels()Me.lbl_CodUsuario.Text = csD.dtLabels.Rows(0)("cod_ID_Usuario")
    Me.lblNomeUsuario.Text = csD.dtLabels.Rows(0)("nom_NomeUsuario") + " " + csD.dtLabels.Rows(0)("nom_Sobrenome")
    Me.lbl_Malha.Text = csD.dtLabels.Rows(0)("des_Malha")  

    If csD.dtLabels.Rows(0)("num_ID_TipoDeRede") = 8 Then
    Me.lbl_Rede.Text = "RDS"
    Else
    Me.lbl_Rede.Text = "RDA"
    End If 

    Me.lbl_IDMalha.Text = csD.dtLabels.Rows(0)("num_ID_Malha")
    Me.lbl_IDPermissao.Text = csD.dtLabels.Rows(0)("num_ID_Permissao")
    Me.lbl_IDRede.Text = csD.dtLabels.Rows(0)("num_ID_TipoDeRede")
    End Sub


    Classe:
    Public Class dadosUsuario
    Private dt As DataTable

    Public Property dtLabels() As DataTable
    Get
    Return dt
    End Get
    Set(ByVal value As DataTable)
    dt = value
    End Set
    End Property

    End Class

    • Editado Ivanenko segunda-feira, 26 de outubro de 2009 21:41
    domingo, 25 de outubro de 2009 04:29
  • Olá,

    Faça a consulta, guarde o valor em Session.

    Verifique no page load se os valores são nulos, se são, faça a consulta e guarde na sessão... se não.. recupere da sessão. Depois preencha os labels.

    Ex.: C#

    DadosUsuario.cs

    public class DadosUsuario
    {
    public Nome {get; set;}
    public Cidade {get; set;}
    }

    ---------------------------------------------------------------------------------------
    MasterPage.cs

    DadosUsuario usuario
    {
    get
    {
    ...
    return (DadosUsuario)Session["DadosUsuario"];
    ...
    }
    set
    {
    Session["DadosUsuario"] = value;
    }
    }

    Sub Page_Load()
    {
    if (Session["DadosUsuario"] == null)
    {
    // Realiza consulta.
    // preenche a session com o resultado
    // Ex.: Session["DadosUsuario"] = ConsultaDadosCliente();
    }
    campo1.Text = usuario.Nome;
    campo2.Text = usuario.Cidade;
    ...
    ...
    ...
    }
    Roberto Santos http://blog.robertoosantos.com
    • Marcado como Resposta Ivanenko sábado, 31 de outubro de 2009 14:19
    domingo, 25 de outubro de 2009 11:41
  • Resolvi usando variaveis de sessão.
    Sergio Ivanenko
    • Marcado como Resposta Ivanenko quinta-feira, 29 de outubro de 2009 23:20
    quinta-feira, 29 de outubro de 2009 23:20
  • Então marca minha resposta como certa ué... :)
    Roberto Santos http://blog.robertoosantos.com
    sexta-feira, 30 de outubro de 2009 01:13
  • Falou Robeto!


    Sergio Ivanenko
    sábado, 31 de outubro de 2009 14:20