none
Refresh na pagina ou nao ? RRS feed

  • Pergunta

  • Pessoal,

    Tenho um carrinho de compras q em determinado momento adiciona 1 item ao carrinho.
    No entanto, se a pessoa executar um refresh na pagina o sistema adiciona novamente um novo produto igual ao carrinho.

    Ate ai nao seria problema.
    Mas no caso de cupom de desconto, ha cada refresh o usuario consegue realizar descontos sobre descontos.

    Como eu poderia verificar se o usuario esta recarregando a mesma pagina de novo e neste caso nao inserir o produto ou desconto mais uma vez ?

    Valeu

    quinta-feira, 19 de abril de 2012 19:44

Respostas

  • Boas,

    O Refresh na página resubmete ao servidor o ultimo pedido, i.e., exactamente os mesmos dados, ViewState ... tudo.

    Assim é normal que o delete ocorra n vezes.

    Tipicamente a solução é usar um 'selo' unico que é guardado em sessão e adicionado ao formulario (via hidden input).

    Se o selo submetido no pedido for diferente do que está em sessão devolvemos erro. Caso seja igual a operação é realizada e no PreRender deverá ser gerado e registado um novo 'selo'.

    Existem várias variantes mais complexas desta abordagem.


    Nuno Gomes http://nunogomes.net

    • Marcado como Resposta AGA Neto segunda-feira, 23 de abril de 2012 03:54
    domingo, 22 de abril de 2012 00:31

Todas as Respostas

  • Ola A.G.A,

    Você pode colocar dentro do Page_Load o seguinte código:

    if(!Page.IsPostBack)
    {
         //TODO: colocar código de carregamento da pagina
         //aqui
    }

    toda vez que a pagina carregar ele vai verificar se ela esta sendo carregada pela primeira vez ou se o usuário deu um refresh na pagina.

    Caso o usuário esteja dando um refresh na pagina ele não entrará no if e não ira executar o código de desconto.

    espero ter te ajudado

    Abraços


    "Faça as coisas da forma mais simples possível. Mas não mais simples do que isto" - Albert Einstein

    sexta-feira, 20 de abril de 2012 03:32
  • Nao e' isso nao.
    O problema ocorre por exemplo qdo uma pagina tem um gridview.RowDeleting.

    Se eu executo a pagina e pressiono o botao de delete, tudo funciona ok.
    No entanto se eu dou um refresh na pagina, sem precisar apertar o botal de delete ele ja vai e executo o comando de delecao.

    sábado, 21 de abril de 2012 07:16
  • Boas,

    O Refresh na página resubmete ao servidor o ultimo pedido, i.e., exactamente os mesmos dados, ViewState ... tudo.

    Assim é normal que o delete ocorra n vezes.

    Tipicamente a solução é usar um 'selo' unico que é guardado em sessão e adicionado ao formulario (via hidden input).

    Se o selo submetido no pedido for diferente do que está em sessão devolvemos erro. Caso seja igual a operação é realizada e no PreRender deverá ser gerado e registado um novo 'selo'.

    Existem várias variantes mais complexas desta abordagem.


    Nuno Gomes http://nunogomes.net

    • Marcado como Resposta AGA Neto segunda-feira, 23 de abril de 2012 03:54
    domingo, 22 de abril de 2012 00:31