0
I am having an error that when updating the page her gridview runs the Rowcommand button clicked and adds again a product to the cart I created, I wonder if there is a way to block this without being javascript. Thank you.
Code of Page Load:
protected void Page_Load(object sender, EventArgs e)
{
CLIENTE cliente = (CLIENTE)Session["dadosUser"];
Response.Write("<h1>" + cliente.NOME.ToUpper() + " escolha seus produtos com o melhor preço! </h1>");
if (!Page.IsPostBack)
{
//Se a sessão não for nula atualiza carrinho com a lista na sessão
if (Session["carrinhoDeCompras"] != null)
carrinho = (List<PRODUTO>)Session["carrinhoDeCompras"];
//Atualiza a label com a a quantidade de itens na lista carrinho
lblNumItens.Text = "Quantidade de itens no carrinho: " + carrinho.Count;
lerProdutos();
Session["CarrinhoDeCompras"] = carrinho;
}
else
{
if (Session["carrinhoDeCompras"] != null)
carrinho = (List<PRODUTO>)Session["carrinhoDeCompras"];
lblNumItens.Text = "Quantidade de itens no carrinho: " + carrinho.Count;
}
//Se a quantidade de itens no carrinho for maior que zero habilita o botão que encaminha para o carrinho
if (carrinho.Count > 0)
{
btnConferirCompra.Enabled = true;
}
else
{
btnConferirCompra.Enabled = false;
}
}
Method to read Products():
private void lerProdutos(){
bdEntidades = new Entities();
List<PRODUTO> listaProdutosCadastrados = bdEntidades.PRODUTOes.ToList();
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("nome");
dt.Columns.Add("valor_unit");
dt.Columns.Add("id_categoria_prod");
dt.Columns.Add("Imagem");
var info = from p in bdEntidades.PRODUTOes
join c in bdEntidades.CATEGORIA_PRODUTO
on p.ID_CATEGORIA_PROD equals c.ID
join i in bdEntidades.IMG_PRODUTO
on p.ID_IMAGEM equals i.ID
orderby p.ID
select new
{
p.ID,
p.NOME,
p.VALOR_UNIT,
c.NOME_CATEGORIA,
i.IMAGEM
};
foreach (var produto in info)
{
byte[] b = produto.IMAGEM;
String img64 = Convert.ToBase64String(b);
//string URL = "data:image/jpg;base64,";
//URL += img64;
string imagemDataUrl = String.Format("data:imagem/png;base64, {0}", img64);
dt.Rows.Add(produto.ID, produto.NOME, produto.VALOR_UNIT, produto.NOME_CATEGORIA, imagemDataUrl);
}
grdProdutos.DataSource = dt;
grdProdutos.DataBind();
}
Rowcommand :
protected void grdProdutos_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "AddItem":
if (Page.IsPostBack)
{
Session["carrinhoDeComprasAntes"] = carrinho;
decimal idProduto = Convert.ToDecimal(e.CommandArgument);
bdEntidades = new Entities();
PRODUTO itemSelecionado = bdEntidades.PRODUTOes.Where(tb => tb.ID == idProduto).FirstOrDefault();
// Recupera o carrinho de compras
if (Session["carrinhosDeCompras"] != null)
carrinho = (List<PRODUTO>)Session["carrinhoDeCompras"];
//Adiciona novo item
carrinho.Add(itemSelecionado);
//Guarda carrinho de compras
Session["carrinhoDeCompras"] = carrinho;
bdEntidades.Dispose();
lblNumItens.Text = "Quantidade de itens no carrinho: " + carrinho.Count;
btnConferirCompra.Enabled = true;
}
break;
default:
break;
}
}
Gabriel, it would be easier for us to help you if you could post what you have in source code.
– Pablo Tondolo de Vargas
Ready. I posted.
– Gabriel Souza
I searched, but only find things related to HTTP get and post method
– Gabriel Souza
Wanted to get away from it or javascript if possible.
– Gabriel Souza
@Grabrielsouza, just to see if I got it right, you add a product, do the post and render the page with the return, but if the user gives a refresh,?
– Leandro Angelo
So I guess it’s that return part that’s causing the mistake.
– Gabriel Souza
I started to learn this part of web has 1 month or so, I still have no knowledge to check this return, but it is happening of the person give a refresh and the post be done again.
– Gabriel Souza