我在使用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
当我按下gridview内的按钮时会发生这种情况,奇怪的是,我有另一个gridview,在运行不同代码但没有错误的列中也有自定义按钮。以下是该页面的代码及其背后的代码。
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(); } } }
和实际页面:
<%@ 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>
现在我想知道,这是否有什么关系的事实,GridView是内部的Ajax Tab Container?因为我的其他工作正常的表不是…
GridView
Ajax Tab Container
注意:由于字符限制,不得不从页面上剪切一些代码
1)GridView中无效的Postback或Callback参数问题可能是:您正在使用对象数据源或通过函数调用的手动绑定在Page_Load事件中绑定数据。这将使您的GridView在任何控件的每个事件触发时都绑定数据。
当您使用OnRowCommand触发任何GridView命令时,在RowCommand触发之前,您的GridView将重新绑定,并且其中的所有控件都将分配给新的ID。因此,RowCommand无法获取触发事件的项目。
GridView中无效的Postback或Callback参数的解决方案:您可以在此条件下将数据绑定
if (!IsPostBack) { //Your code for Bind data }
如果无法正常运行,此代码肯定会为您提供解决方案,然后检查是否有其他控件没有出错。