cb1295
cb1295

Reputation: 753

Error: Invalid postback or callback argument

I am getting the following error on a button click with gridview

 Server Error in '/' Application.
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.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: 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.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[ArgumentException: 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.]
   System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +144
   System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +111
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +29
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929

It occurs when I press a button inside the gridview, and the odd thing is that I have another gridview, also with custom button in a column that runs different code, but gives no errors. Below is the code for the page and the codebehind.

namespace CCCC
{
    public partial class drivermangement : System.Web.UI.MasterPage
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
            {
                if (Roles.IsUserInRole("Administrator"))
                {
                    LoggedInUser.Value = Convert.ToString(Request.QueryString["driver"]);
                }
                else
                {
                    LoggedInUser.Value = Membership.GetUser().UserName.ToString();
                }
                DayOfTheWeekHiddenField.Value = Convert.ToString(Request.QueryString["dow"]);
            }
            else
            {
                Response.Redirect("default.aspx");
            }
            if (NewCustomersGrid.Rows.Count == 0)
            {
                NewCustomersLabel.Visible = false;
            }
            else
            {
                NewCustomersLabel.Visible = true;
            }
            if (NeedCompostGrid.Rows.Count == 0)
            {
                NeedCompostLabel.Visible = false;
            }
            else
            {
                NeedCompostLabel.Visible = true;
            }
            if (CanceledGrid.Rows.Count == 0)
            {
                CanceledLabel.Visible = false;
            }
            else
            {
                CanceledLabel.Visible = true;
            }
            if (VacationGrid.Rows.Count == 0)
            {
                VacationLabel.Visible = false;
            }
            else
            {
                VacationLabel.Visible = true;
            }
            if (NewCustomersGrid0.Rows.Count == 0)
            {
                NewCustomersLabel0.Visible = false;
            }
            else
            {
                NewCustomersLabel0.Visible = true;
            }
            if (NeedCompostGrid0.Rows.Count == 0)
            {
                NeedCompostLabel0.Visible = false;
            }
            else
            {
                NeedCompostLabel0.Visible = true;
            }
            if (CanceledGrid0.Rows.Count == 0)
            {
                CanceledLabel0.Visible = false;
            }
            else
            {
                CanceledLabel0.Visible = true;
            }
        }

        protected void NewCustomerDoneButton_Click(object sender, EventArgs e)
        {
            int CustomerID = Convert.ToInt32(((Button)sender).CommandArgument);
            string CustomerBinNeedAcknowledged = "Yes";
            string strConnString = "Data Source";
            using (SqlConnection con = new SqlConnection(strConnString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "UPDATE Customers SET CustomerBinNeedAcknowledged=@CustomerBinNeedAcknowledged WHERE CustomerID=@CustomerID";
                    cmd.Parameters.AddWithValue("@CustomerBinNeedAcknowledged", CustomerBinNeedAcknowledged);
                    cmd.Parameters.AddWithValue("@CustomerId", CustomerID);
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                }
            } 
       }

and the actual page:

<%@ Master Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" Inherits="CCCCCC.drivermangement" CodeBehind="drivermangement.master.cs" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <asp:HiddenField ID="LoggedInUser" runat="server" />
    <asp:HiddenField ID="DayOfTheWeekHiddenField" runat="server" />
    <ajaxToolkit:TabContainer ID="RoutingTabs" runat="server" ActiveTabIndex="0" 
        Width="900px">
        <ajaxToolkit:TabPanel runat="server" HeaderText="Pre-Route" ID="PreRouteTab">
        <ContentTemplate>
<br />
<asp:Label ID="NewCustomersLabel" runat="server" 
        style="font-weight: 700; font-size: large; color: #009933" Text="New Customers"></asp:Label>

<asp:GridView ID="NewCustomersGrid" runat="server" AllowPaging="True" AutoGenerateColumns="False" BackColor="White" 
        BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" 
        DataKeyNames="CustomerId" DataSourceID="NewCustomers" ForeColor="Black" 
        GridLines="Vertical">
<AlternatingRowStyle BackColor="#99FF99" ></AlternatingRowStyle>
<Columns>
<asp:BoundField DataField="CustomerFullName" HeaderText="Name" 
                SortExpression="CustomerFullName" />
<asp:BoundField DataField="CustomerFullAddress" HeaderText="Address" 
                SortExpression="CustomerFullAddress" />
<asp:BoundField DataField="CustomerNeedsBin" HeaderText="Needs Bin?" 
        SortExpression="CustomerNeedsBin" />
<asp:TemplateField ShowHeader="False"><ItemTemplate>
                <asp:Button ID="NewCustomerDoneButton" runat="server" CommandName="" 
                Text="Done" CommandArgument='<%# Eval("CustomerID") %>' OnClick="NewCustomerDoneButton_Click" CausesValidation="False" />

</ItemTemplate>
</asp:TemplateField>
</Columns>
<asp:SqlDataSource ID="NewCustomers" runat="server" 
        ConnectionString="<%$ ConnectionStrings:tcc_customersConnectionString %>" 

                SelectCommand="SELECT [CustomerId], [CustomerStatus], [CustomerFullName], [CompanyName], [CustomerFullAddress], [CustomerPickUpDay], [CustomerPickUpDay2], [CustomerDriver], [CustomerNeedsBin], [CustomerBinNeedAcknowledged] FROM [Customers] WHERE (([CustomerBinNeedAcknowledged] = @CustomerBinNeedAcknowledged) AND ([CustomerNeedsBin] = @CustomerNeedsBin) AND ([CustomerDriver] = @CustomerDriver) AND ([CustomerStatus] = @CustomerStatus) AND ([CustomerPickUpDay] = @CustomerPickUpDay OR [CustomerPickUpDay2] = @CustomerPickUpDay2))"><SelectParameters>
<asp:Parameter DefaultValue="No" Name="CustomerBinNeedAcknowledged" Type="String" />
<asp:Parameter DefaultValue="Yes" Name="CustomerNeedsBin" Type="String" />
<asp:ControlParameter ControlID="LoggedInUser" Name="CustomerDriver" 
            PropertyName="Value" Type="String"></asp:ControlParameter>
<asp:Parameter DefaultValue="New" Name="CustomerStatus" Type="String" />
<asp:ControlParameter ControlID="DayOfTheWeekHiddenField" Name="CustomerPickUpDay" 
                PropertyName="Value" Type="String" ></asp:ControlParameter>
<asp:ControlParameter ControlID="DayOfTheWeekHiddenField" 
            Name="CustomerPickUpDay2" PropertyName="Value" Type="String" />
</SelectParameters>
</asp:SqlDataSource>

</ContentTemplate>

</ajaxToolkit:TabPanel>
        <ajaxToolkit:TabPanel runat="server" HeaderText="Post-Route" ID="PostRouteTab"><ContentTemplate>

I'm now wondering, does this have anything to do with the fact that the GridView is inside an Ajax Tab Container? Cause my other table that works fine is not...

Note: had to cut some code from page due to character limits

Upvotes: 4

Views: 31192

Answers (5)

Zolfaghari
Zolfaghari

Reputation: 1323

I testing all above solutions and other posts but my problem isn't done.

My problem was solved when cancel event at end of grid event at server side.

This type of problem occurred when we using edit event of gridview. just add e.Cancel = true; at the end of event.

protected void grdEducation_RowEditing(object sender, GridViewEditEventArgs e)
{
  // do your processing ... 

  // at end     
  e.Cancel = true;
}

Upvotes: 0

Umer Hayat
Umer Hayat

Reputation: 41

This could be because of any third party controls you are using.

I also had this error. In my case i have a repeater control inside updatepanel and inside repeater control i was using telerik datepicker control. It was working fine in IE but not in mozilla and chrome. I examined the form data in both the cases by sending request from chrome and IE and found that the triggring control values are slightly different. i used telerik RadAjaxmanager instead of updatepanel the error gone.

Upvotes: 0

NoviceProgrammer
NoviceProgrammer

Reputation: 3365

A few things to try

  1. In your Page Load event, add a check for !Page.IsPostBack and move the non-authenticating code block there.
  2. Experiment using a LinkButton instead of a regular button.

Upvotes: 0

Pushpendra
Pushpendra

Reputation: 810

1) Invalid Postback or Callback argument in GridView Problem may be: You are binding data in Page_Load event with either Object Data Source or Manual Binding with function call. This will make your GridView bind data on every event fire of any control.

When you are firing any GridView command with OnRowCommand, before RowCommand fire your GridView will rebind and all control within it will be assigned to new id. So RowCommand could not get the item which have fired the event.

Solution for Invalid Postback or Callback argument in GridView: You can bind your data within this if condition

if (!IsPostBack)
{
    //Your code for Bind data 
}

This code will definitely give you solution if this not work then check whether any other control is not giving error.

Upvotes: 19

Pushpendra
Pushpendra

Reputation: 810

are you updating the Grid or any such control through javascript or Ajax.

If this is the case then you might face this. Possible solution can be to set EnableEventValidation to false.

Upvotes: 1

Related Questions