none
Duvida sobre session - (iniciante) RRS feed

  • Pergunta

  • Olá, sou iniciante em ASP.NET  e estou treinando mas surgiu uma dúvida no meu código...

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    
    public partial class _Default : System.Web.UI.Page
    {
        Panel pnt;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Session.Add("painel", pnt);
            }
            else
            {
                pnt = (Panel)Session["painel"];
             
            }
        }
            

    protected void Button1_Click(object sender, EventArgs e) { TextBox1.Text = "A tecla Enter foi pressionada!!!"; Button btn = new Button(); btn.Text = "Novo botão"; Panel1.Controls.Add(btn); Session["painel"] = Panel1; } }

    eu tenho um panel, um textbox e um botao. o Panel está setado para defaultbutton = Button1, ai assim que eu pressiono enter a mensagem (A tecla Enter foi pressionada!!!) é inserida no textbox1 e um novo botao é inserido no panel. Porem ao clicar no botão criado dinamicamente, gostaria que ele se mantesse na visializacao, porem com esse meu código ele some...Qual seria a lógica apropriada para o que estou tentando fazer???

    Obrigado.. desde já!
    • Movido AndreAlvesLima quinta-feira, 10 de março de 2011 15:18 (De:.NET Development - Geral)
    sexta-feira, 7 de agosto de 2009 13:04

Respostas

  • O Controle irá sumir porque o código que adiciona ele no Painel1 irá ser executado somente no evento Button1_Click e após o método Post_Back.

    A melhor hora de carregar controles dinamicamente, é no método Pre_Init, pois seu controle ainda chegará atempo de ser beneficiado pelo ViewState da sua aplicação

    • Sugerido como Resposta Ari C. Raimundo sexta-feira, 7 de agosto de 2009 17:59
    • Marcado como Resposta AndreAlvesLima quinta-feira, 10 de março de 2011 15:17
    sexta-feira, 7 de agosto de 2009 14:05
  • Para exemplificar so uso de Sessao vc pode trabalhar da seguinte forma:

    public partial class _Default : System.Web.UI.Page
    {
    	Panel pnt {
    	   get {
    	      return (Panel)Session["painel"];
    	   }
    	   set {
    	      Session.Add("painel", value);
    	   }
    	}
    	
    	protected void Page_Load(object sender, EventArgs e)		
    	{
    		if (!IsPostBack) pnt = Panel1;
    	}
            
    
    	protected void Button1_Click(object sender, EventArgs e) {
            	TextBox1.Text = "A tecla Enter foi pressionada!!!";
      	     	Button btn = new Button();
            	btn.Text = "Novo botão";
            	pnt.Controls.Add(btn);
            }
    }
    Mas pelo menos do jeito que esta o fonte que vc mostrou.... poderia fucionara da mesma forma somente usando:
    public partial class _Default : System.Web.UI.Page
    {
    	protected void Page_Load(object sender, EventArgs e)		
    	{
    
    	}
            
    
    	protected void Button1_Click(object sender, EventArgs e) {
            	TextBox1.Text = "A tecla Enter foi pressionada!!!";
      	     	Button btn = new Button();
            	btn.Text = "Novo botão";
            	Panel1.Controls.Add(btn);
            }
    }
    Agora, como essa informação so vai ser usa em apenas um Webform, colocar o Panel em sessão é meio custoso, seria melhor usar o ViewState para isso...
    public partial class _Default : System.Web.UI.Page
    {
    	Panel pnt {
    	   get {
    	      return (Panel)ViewState["painel"];
    	   }
    	   set {
    	      ViewState["painel"] = value;
    	   }
    	}
    	
    	protected void Page_Load(object sender, EventArgs e)		
    	{
    		if (!IsPostBack) pnt = Panel1;
    	}
            
    
    	protected void Button1_Click(object sender, EventArgs e) {
            	TextBox1.Text = "A tecla Enter foi pressionada!!!";
      	     	Button btn = new Button();
            	btn.Text = "Novo botão";
            	pnt.Controls.Add(btn);
            }
    }

    What would Brian Boitano do ?
    • Marcado como Resposta AndreAlvesLima quinta-feira, 10 de março de 2011 15:17
    sexta-feira, 7 de agosto de 2009 16:31
    Moderador
  • Olá,

    Basta passar o evento no momento em que criar o botão,

    Exemplo:

    myButton.Click += new EventHandler(myButton_Click);


    Saiba mais: http://msdn.microsoft.com/en-us/library/y3bwdsh3.aspx


    Abs
    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/
    • Marcado como Resposta AndreAlvesLima quinta-feira, 10 de março de 2011 15:17
    segunda-feira, 10 de agosto de 2009 00:47

Todas as Respostas

  • Paulo,

    A propriedade EnableViewState desse controle Panel1 está definida como True?

    Att.

    Ari C. Raimundo
    sexta-feira, 7 de agosto de 2009 13:22
  • sim... EnableViewState está true... o que será heim???

    sexta-feira, 7 de agosto de 2009 13:24
  • O Controle irá sumir porque o código que adiciona ele no Painel1 irá ser executado somente no evento Button1_Click e após o método Post_Back.

    A melhor hora de carregar controles dinamicamente, é no método Pre_Init, pois seu controle ainda chegará atempo de ser beneficiado pelo ViewState da sua aplicação

    • Sugerido como Resposta Ari C. Raimundo sexta-feira, 7 de agosto de 2009 17:59
    • Marcado como Resposta AndreAlvesLima quinta-feira, 10 de março de 2011 15:17
    sexta-feira, 7 de agosto de 2009 14:05
  • Sera que voce poderia me ajudar a refazer o codigo, pq eu ainda não conheco esse método...
    sexta-feira, 7 de agosto de 2009 14:35
  • Para exemplificar so uso de Sessao vc pode trabalhar da seguinte forma:

    public partial class _Default : System.Web.UI.Page
    {
    	Panel pnt {
    	   get {
    	      return (Panel)Session["painel"];
    	   }
    	   set {
    	      Session.Add("painel", value);
    	   }
    	}
    	
    	protected void Page_Load(object sender, EventArgs e)		
    	{
    		if (!IsPostBack) pnt = Panel1;
    	}
            
    
    	protected void Button1_Click(object sender, EventArgs e) {
            	TextBox1.Text = "A tecla Enter foi pressionada!!!";
      	     	Button btn = new Button();
            	btn.Text = "Novo botão";
            	pnt.Controls.Add(btn);
            }
    }
    Mas pelo menos do jeito que esta o fonte que vc mostrou.... poderia fucionara da mesma forma somente usando:
    public partial class _Default : System.Web.UI.Page
    {
    	protected void Page_Load(object sender, EventArgs e)		
    	{
    
    	}
            
    
    	protected void Button1_Click(object sender, EventArgs e) {
            	TextBox1.Text = "A tecla Enter foi pressionada!!!";
      	     	Button btn = new Button();
            	btn.Text = "Novo botão";
            	Panel1.Controls.Add(btn);
            }
    }
    Agora, como essa informação so vai ser usa em apenas um Webform, colocar o Panel em sessão é meio custoso, seria melhor usar o ViewState para isso...
    public partial class _Default : System.Web.UI.Page
    {
    	Panel pnt {
    	   get {
    	      return (Panel)ViewState["painel"];
    	   }
    	   set {
    	      ViewState["painel"] = value;
    	   }
    	}
    	
    	protected void Page_Load(object sender, EventArgs e)		
    	{
    		if (!IsPostBack) pnt = Panel1;
    	}
            
    
    	protected void Button1_Click(object sender, EventArgs e) {
            	TextBox1.Text = "A tecla Enter foi pressionada!!!";
      	     	Button btn = new Button();
            	btn.Text = "Novo botão";
            	pnt.Controls.Add(btn);
            }
    }

    What would Brian Boitano do ?
    • Marcado como Resposta AndreAlvesLima quinta-feira, 10 de março de 2011 15:17
    sexta-feira, 7 de agosto de 2009 16:31
    Moderador
  • Obrigado a todos por me ajudarem..
    agora tenho outro problema..
    ao clicar no botao q criei estaticamente, o botao novo nao some, mas ao clicar no botao criado dinamicamente ele some..
    no caso acho q eu preciso criar um evento para esse botao.. mas.. COMO SE CRIA UM EVENTO PARA BOTOES CRIADOS VIA CODIGO???
    sexta-feira, 7 de agosto de 2009 20:40
  • Olá,

    Basta passar o evento no momento em que criar o botão,

    Exemplo:

    myButton.Click += new EventHandler(myButton_Click);


    Saiba mais: http://msdn.microsoft.com/en-us/library/y3bwdsh3.aspx


    Abs
    Nelson Borges - http://nelsonborgesjr.spaces.live.com/blog/
    • Marcado como Resposta AndreAlvesLima quinta-feira, 10 de março de 2011 15:17
    segunda-feira, 10 de agosto de 2009 00:47