Preventing sending data when updating page F5 in ASP.NET

0

I have a problem, I have a grindview with products, every time I add a product in the stamp it adds, but if I click on F5 it adds the new data to the cart.

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;

          }
    }



  }

}

    
asked by anonymous 21.11.2017 / 19:43

1 answer

0

Using stateView

StateView Microsoft Asp.net

        protected void Page_Load(object sender, EventArgs e)
    {
        if(Page.IsPostBack == false)
        {
            ViewState["estado"] = System.Guid.NewGuid().ToString();
            Session["estado"] = ViewState["estado"].ToString();
            Session["carrinhoDeCompras"] = new List<PRODUTO>();
            CarregarProdutos();

        }
        else
        {
            if(ViewState["estado"].ToString() != Session["estado"].ToString())
            {
                IsPageRefresh = true;
            }
            Session["estado"] = System.Guid.NewGuid().ToString();
            ViewState["estado"] = Session["estado"].ToString();
        }
    }
    
14.12.2017 / 13:42