I m having this error when i try to add my item to cart.
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
I have been search to many forums and article. it say can be solve using Not postback in page load. i have been try to bind my data in Not post back. somehow the error still exist. What to bind in If not post back actually?
aspx page
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="product.aspx.vb" Inherits="product" title="Cosmetic Catalogue" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<table bgcolor="#FFE1FF" style="width:100%;">
<tr>
<td valign="top" width="25%">
<fieldset id="submenu">
<div>
<cc1:Accordion ID="Accordion1" runat="server" FadeTransitions="True" FramesPerSecond="40" HeaderCssClass="accordionHeader" ContentCssClass="accordionContent" RequireOpenedPane="false" SelectedIndex="0">
<Panes>
<cc1:AccordionPane ID="AccordionPane1" runat="server" HeaderCssClass="accordionHeader" ContentCssClass="accordionContent" >
<Header><a href="#" onclick="return false;" class="accordionLink">Face</a>
</Header>
<Content>
<p><a href="product.aspx?cat=30101" class="accordionSublink">Foundation</a></p>
<p><a href="product.aspx?cat=30102" class="accordionSublink">Powder</a></p>
<p><a href="product.aspx?cat=30103" class="accordionSublink">Concealer</a></p>
<p><a href="product.aspx?cat=30104" class="accordionSublink">Blush</a></p>
</Content>
</cc1:AccordionPane>
<cc1:AccordionPane ID="AccordionPane2" runat="server" HeaderCssClass="accordionHeader" ContentCssClass="accordionContent" >
<Header><a href="#" onclick="return false;" class="accordionLink">Eyes</a>
</Header>
<Content>
<p><a href="product.aspx?cat=30201" class="accordionSublink">EyeShadow</a></p>
<p><a href="product.aspx?cat=30202" class="accordionSublink">Eye Liner</a></p>
<p><a href="product.aspx?cat=30203" class="accordionSublink">Mascara</a></p>
</Content>
</cc1:AccordionPane>
<cc1:AccordionPane ID="AccordionPane3" runat="server" HeaderCssClass="accordionHeader" ContentCssClass="accordionContent" >
<Header><a href="#" onclick="return false;" class="accordionLink">Lip</a>
</Header>
<Content>
<p><a href="product.aspx?cat=30301" class="accordionSublink">Lip Color</a></p>
<p><a href="product.aspx?cat=30302" class="accordionSublink">Lip Gloss</a></p>
<p><a href="product.aspx?cat=30303" class="accordionSublink">Lip Liner</a></p>
</Content>
</cc1:AccordionPane>
</Panes>
</cc1:Accordion>
</div>
</fieldset>
<br />
<fieldset id="askexpert" style="height: 200px">
<asp:ImageButton ID="ImageButton1" runat="server" BorderColor="Silver"
BorderStyle="Dotted" BorderWidth="0.1em"
ImageUrl="~/Image/WebsiteImage/ASKEXPERT.jpg"
PostBackUrl="~/AskExpert.aspx" />
</fieldset>
</td>
<td valign="top" width="75%">
<table bgcolor="White" style="width:100%;">
<tr>
<td valign="top" colspan="2">
<asp:Label ID="Label1" runat="server" CssClass="header"
Text="Product Catalogue"></asp:Label>
</td>
</tr>
<tr>
<td valign="top">
</td>
<td valign="top">
</td>
</tr>
<tr align="right">
<td valign="top" colspan="2">
<asp:Label ID="Label2" runat="server" Text="Sort by:"></asp:Label>
<asp:DropDownList ID="ddlSort" runat="server" AutoPostBack="True">
<asp:ListItem Selected="True" Value="0">Brand A-Z</asp:ListItem>
<asp:ListItem Value="1">Product Name A-Z</asp:ListItem>
<asp:ListItem Value="2">Price (low- high)</asp:ListItem>
<asp:ListItem Value="4">Price (high-low)</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td valign="top">
</td>
<td valign="top">
</td>
</tr>
<tr>
<td valign="top" colspan="2">
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" DataKeyNames="item_No,brand_ID"
DataSourceID="ItemSqlDataSource" Width="100%" GridLines="None"
ShowHeader="False">
<Columns>
<asp:BoundField DataField="item_No" HeaderText="" ReadOnly="True"
SortExpression="item_No" InsertVisible="false" Visible="False" />
<asp:TemplateField>
<ItemTemplate>
<table width="100%">
<tr>
<td valign="top" rowspan="6" width="100px">
<asp:ImageButton ID="Image" runat="server" ImageUrl='<%#DataBinder.Eval(Container.DataItem, "item_image" )%>' Width="100px" PostBackUrl='<%# "productdetails.aspx?id=" + DataBinder.Eval (Container.DataItem,"item_no").ToString() %>' /></td>
<td valign="top">
</td>
<td valign="top">
</td>
<td rowspan="6" valign="middle">
<asp:Button ID="btnCart2" runat="server"
CommandArgument='<%# Eval("item_No") %>' CommandName="CART" Text="Add to Cart" /></td>
</tr>
<tr>
<td valign="top">
</td>
<td valign="top">
</td>
</tr>
<tr>
<td valign="top" width="50%">
<%#DataBinder.Eval(Container.DataItem, "brand_name")%></td>
<td valign="top">
</td>
</tr>
<tr>
<td valign="top">
<%#DataBinder.Eval(Container.DataItem, "item_name")%></td>
<td valign="top">
RM <%#DataBinder.Eval(Container.DataItem, "item_price")%></td>
</tr>
<tr>
<td valign="top">
</td>
<td valign="top" width="25%">
Qty:
<asp:DropDownList ID="ddlQty" runat="server" AutoPostBack="False">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
<asp:ListItem>4</asp:ListItem>
<asp:ListItem>5</asp:ListItem>
<asp:ListItem>6</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td valign="top">
rating</td>
<td valign="top">
</td>
</tr>
</table><hr />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<AlternatingRowStyle BackColor="WhiteSmoke" />
</asp:GridView>
<asp:SqlDataSource ID="ItemSqlDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>" >
</asp:SqlDataSource>
</td>
</tr>
<tr>
<td valign="top" colspan="2">
</td>
</tr>
<tr>
<td valign="top" colspan="2">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top" width="25%">
</td>
<td valign="top" width="75%">
</td>
</tr>
</table>
</asp:Content>
Code Behind:
Partial Class product
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
'What should i bind??
End If
Me.LoadCommand()
End Sub
Private Sub LoadCommand()
Dim StrSQL As String = "SELECT * FROM Item INNER JOIN Brand ON Item.item_brandID = Brand.brand_ID"
Me.ItemSqlDataSource.SelectParameters.Clear()
If Not Me.Request.QueryString("cat") Is Nothing Then
StrSQL += " WHERE [item_subcatID] = @item_subcatID"
Me.ItemSqlDataSource.SelectParameters.Add("item_subcatID", Me.Request.QueryString("cat").ToString().Trim())
End If
If ddlSort.SelectedValue = 0 Then
StrSQL += " ORDER BY Brand.brand_name"
End If
If ddlSort.SelectedValue = 1 Then
StrSQL += " ORDER BY Item.item_name"
End If
If ddlSort.SelectedValue = 2 Then
StrSQL += " ORDER BY Item.item_price"
End If
If ddlSort.SelectedValue = 3 Then
StrSQL += " ORDER BY Item.item_name DESC"
End If
Me.ItemSqlDataSource.SelectCommand = StrSQL
Me.ItemSqlDataSource.DataBind()
Me.GridView1.DataBind()
End Sub
Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
If e.CommandName = "CART" Then
Dim DB As New DB("SELECT * FROM Cart WHERE cart_item_No = @cart_item_No AND cart_session_ID = @cart_session_ID and cart_order_ID is null")
DB.AddParameter("cart_item_No", e.CommandArgument.ToString())
DB.AddParameter("cart_session_ID", Me.Session.SessionID)
Dim Reader As SqlDataReader = DB.SQLGet
If Reader.Read Then
Dim qty1 As Integer = Reader("cart_qty").ToString()
Dim row As GridViewRow = DirectCast((DirectCast(e.CommandSource, Button).NamingContainer), GridViewRow)
Dim qty As DropDownList = DirectCast(row.FindControl("ddlQty"), DropDownList)
Dim qty2 As Integer = qty.SelectedValue
Dim Totalqty As Integer = qty1 + qty2
Dim DB3 As New DB("UPDATE Cart SET cart_qty =@cart_qty WHERE cart_item_No = @cart_item_No AND cart_session_ID = @cart_session_ID and cart_order_ID is null")
DB3.AddParameter("cart_item_No", e.CommandArgument.ToString())
DB3.AddParameter("cart_session_ID", Me.Session.SessionID)
DB3.AddParameter("cart_qty", Totalqty)
If Not DB3.SQLPost() Then
Me.Response.Write(DB3.StrErrorMessage)
Return
End If
DB3.Close()
Me.Response.Redirect("shoppingcart.aspx")
Else
Dim DB2 As New DB("INSERT INTO [Cart] (cart_item_No, cart_session_ID, cart_qty) VALUES (@cart_item_No, @cart_session_ID, @cart_qty)")
DB2.AddParameter("cart_item_No", e.CommandArgument)
DB2.AddParameter("cart_session_ID", Me.Session.SessionID)
' Find dropdownlist ddl on the row where you clicked the button
Dim row As GridViewRow = DirectCast((DirectCast(e.CommandSource, Button).NamingContainer), GridViewRow)
Dim qty As DropDownList = DirectCast(row.FindControl("ddlQty"), DropDownList)
DB2.AddParameter("cart_qty", qty.SelectedValue)
If Not DB2.SQLPost() Then
Me.Response.Write(DB2.StrErrorMessage)
End If
DB2.Close()
Me.Response.Redirect("shoppingcart.aspx")
End If
End If
End Sub
End Class