Impedindo reenvio de dados ao atualizar página (F5) em ASP.NET

21/11/2017

5

Estou com um problema, tenho um grindview com produtos, toda vez que add um produto no carimbo ele add, mas se eu clicar no F5 ele adiciona o dado novamento no carrinho.


    public partial class carrinho : System.Web.UI.Page
    {
        ProjetoContext bd = null;

        public static double valorTotal = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            if(!Page.IsPostBack)
            { 
                GridView1.DataSource = (List<PRODUTO>)Session["carrinhoDeCompras"];
                recuperarValor();
                GridView1.DataBind();
            }
         }

        private void recuperarValor()
        {
            
            List<PRODUTO> carrinho = (List<PRODUTO>)Session["carrinhoDeCompras"];

            valorTotal = 0;
            foreach(PRODUTO produto in carrinho)
            {
                valorTotal += Convert.ToDouble(produto.VALOR_UNIT);
                if(carrinho.Count() == 0)
                {
                    valorTotal = 0;
                }
            }
                       
            txtValorTotal.Text = "Valor Total da Compra: " + "R$ " + Convert.ToDouble(valorTotal).ToString();

        }

        protected void btnfinal_Click(object sender, EventArgs e)
        {

            InserirNotaFiscal();
            
        }

        private void InserirNotaFiscal()
        {

            bd = new ProjetoContext();

            NOTA_FISCAL nf = new NOTA_FISCAL();

            int id = Convert.ToInt16(Session["Id"]);
            
            //Passando os dados que serão adicionado ao banco de dados; 
            
            if(valorTotal != 0)
            {
                nf.ID_CLIENTE = Convert.ToInt32(id);
                nf.VALOR_TOTAL = Convert.ToDecimal(valorTotal);
                nf.CD_NOTA = Convert.ToInt32((bd.NOTA_FISCAL.Count() + 1) * 100);

                List<PRODUTO> listProduto = (List<PRODUTO>)Session["carrinhoDeCompras"];

                nf.PRODUTOes = new List<PRODUTO>();

                foreach (PRODUTO prod in listProduto)
                {
                    PRODUTO produto = bd.PRODUTOes.Where(p => p.ID == prod.ID).FirstOrDefault();

                    //PRODUTO produto = prod;

                    bd.PRODUTOes.Attach(produto);

                    nf.PRODUTOes.Add(produto);
                }

                Session["idNotaFiscal"] = nf.ID;
                //Adicionando ao Banco de Dados
                bd.NOTA_FISCAL.Add(nf);

                //Salvando mudanças no banco de dados
                bd.SaveChanges();

                bd.Dispose();
            }
            

        }

        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            switch (e.CommandName)
            {
                case "removeItem":
                    decimal idProduto = Convert.ToDecimal(e.CommandArgument);

                                                          
                    List<PRODUTO> carrinho = (List<PRODUTO>)Session["carrinhoDeCompras"];

                    foreach(PRODUTO c in carrinho)
                    {
                        if(c.ID == idProduto)
                        {
                            carrinho.Remove(c);
                            break;
                        }

                    }
                    Session["carrinhoDeCompras"] = carrinho;

                    GridView1.DataSource = (List<PRODUTO>)Session["carrinhoDeCompras"];
                    recuperarValor();
                    GridView1.DataBind();
                    break;
                default:
                    break;
                                        
              }
        }

        
        
      }
}


Responder

Post mais votado

21/11/2017

Olá Antônio,

Acredito que o problema está na validação do isPostBack.

Segue um link que pode te ajudar:

https://forums.asp.net/t/1454208.aspx?what+is+the+value+of+Page+IsPostBack+when+user+Pressed+F5+
isPostBack Refresh

Abraço!
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar