none
Manter conteúdo de uma variável C# - Asp.net após page_load. RRS feed

  • Pergunta


  • No Code-behind, tenho uma variável que gostaria que não fosse "limpa", após o carregamento da página.

    Existe a possibilidade? 

    (Desenvolvedor "Windows forms" sofre com asp.net, viu?)



    Obrigado.

    Do It Easy, Do It Perfect! Dot Net!

    quarta-feira, 3 de julho de 2013 20:07

Todas as Respostas

  • Não deve ser a melhor prática, mas setei a variável com static e o valor foi mantido.

    Aguardo solução, no mínimo, mais elegante.

    Obrigado.


    Do It Easy, Do It Perfect! Dot Net!

    quarta-feira, 3 de julho de 2013 21:17
  • Diego Sayron, blxxx

    vc pode usar Session para guardar a sua variável.

    segue exemplo :

    //Criar a session
    Session["NOMEDASESSION"] = "valor que vc quer";  
    
    
    // ler a session
    string SuaVariavel = Session["NOMEDASESSION"];   

    Segue um link caso precise de mais detalhes Ok

    http://www.codigofonte.net/dicas/csharp/80_trabalhando-com-session-em-c

    abraço ;)


    Diego Almeida Barreto System Analyst / Software Developer

    quarta-feira, 3 de julho de 2013 21:29
  • Olá,

    Cuidado ao usar variável estática no asp.net. Elas são global, um usuário pode alterar dados de outro, que na verdade acessa a mesma variável.

    Além da sessão tem cookies também.

    quarta-feira, 3 de julho de 2013 22:51
    Moderador
  • Diego, se vc vai usar o conteudo dessa informação em mais de uma página o mais aconselhável é que vc use session, cuidado pois session ocupam memoria no servidor pois cada usuario logado é uma session aberta.

    Caso vc vá usar a informação que vc quer guardar numa variável somente na mesma página eu uso sempre umj campo hidden, ele não aparece e como um textbox seu valor não é inicializado no load da página, aqui esta a declaração.

    no aspx : <input id="campo" type="hidden" runat="server" />

    no c# : campo.value = "10";


    Junior

    quinta-feira, 4 de julho de 2013 11:15
  • Se você tem uma variável que não gostaria que fosse "limpa", significa que em algum ponto alguém seta o seu valor, e depois disso você gostaria que este valor fosse mantido. 

    Se esta variável é específica por usuário use SessionState, caso contrário (não específica por usuário) utilize ApplicationState.


    Ao infinito e além!

    quinta-feira, 4 de julho de 2013 11:34
  • Se for somente para a page vc pode usar uma viewstate

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

    quinta-feira, 4 de julho de 2013 14:01
    Moderador
  • O valor da variável não é alterado após o primeiro carregamento, mas outro usuário pode usar a página com valores diferentes para essa variável.

    A variável é utilizada (mas não mais alterada) ao longo do uso da página, para cálculos. E somente nesta página.

    Pelo que entendi, tenho:
    - variável estática: não recomendado
    - Session: depende, já que cada usuário mantém uma session.
    - campo hidden: achei boa a sugestão, não sei é o que se pratica.
    - ApplicationState: pelo que entendi, não é aplicável, pois cada usuário que acesse a página precisa definir essa variável com valores diferentes.
    - Viewstate: ?

    Para fins de compreensão, é como se fosse uma variável para armazenar a idade do visitante e fosse utilizada várias vezes para fins de cálculo e comparações - somente nessa página!

    Ainda estou na dúvida entre session, view e campo hidden.

    Agradeço a gentileza de todos!

    Do It Easy, Do It Perfect! Dot Net!

    quinta-feira, 4 de julho de 2013 17:30
  • Diego deixa eu tentar te explicar :

    Session : são variáveis que são administradas pelo servidor(por padrão) iis e para cada session criada qdo um usuário entra no site é criado a(s) session depende de qtas vc criou, e isso vai ocupando memória.

    viewstate : É o estado do conteúdo que é armazenado no servidor, exemplo no textbox existem uma viewstate por isso o servidor sabe qdo foi alterada o seu conteudo e nesse caso vc pode verificar isso no evento textchanchanged.

    Hidden : É uma tag html semelhante ao textbox, a unica diferença é que ela não aparece na renderização da página por isso o nome (hidden = escondido).

    No caso a sugestão do Seilor em termos é igual a que te dei, a diferença no caso dele é que vc nao precisa criar uma tag no aspx e nem precisa está informando o valor o viewstate é salvo automaticamente no servidor.


    Junior

    quinta-feira, 4 de julho de 2013 17:41
  • Olá Diego,


    Em simples e resumidas palavras, quando se utiliza Asp.Net Webforms (no seu caso) é gerado um campo tipo Hidden na sua página (formulário) a fim de armazenar o estado dos controles da sua página. Para visualizá-lo, após a página carregada exibao código-fonte gerado que irá encontrar um campo do tipo Hidden com name "ViewState", cujo value possui uma string criptografada.

    Por exemplo, se um usuário digitar algum conteúdo em algum TextBox, clicar em algum botão que gera PostBack, pode perceber que o estado (propriedades, inclusive o valor digitado pelo usuário), é mantido. O Asp.Net utiliza o ViewState para guardar informações sobre os controles da sua página.

    Pelo fato de Session e Application gerarem informações no servidor e como você utilizará apenas nessa página, sugiro que no load da página ou em um evento que considerar mais apropriado você coloque o valor da idade num controle do tipo HiddenFiel (Asp.Net). E toda vez que quiser resgatar o valor, basta chamar a propriedade "Value" deste campo.

    Essas coisas tem a ver com clico de vida de aplicações Asp.Net.

    Espero ter ajudado ;)

    Abs

    quinta-feira, 4 de julho de 2013 23:08