【发布时间】:2012-09-08 19:47:12
【问题描述】:
使用 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 中的事实有关吗?因为我的其他工作正常的表不是......
注意:由于字符限制,不得不从页面中删除一些代码
【问题讨论】:
-
忘了注意,我不想禁用事件验证。它只是解决了问题(继续,但视图没有更新)并且让我容易受到攻击,因为它是一种安全措施
-
请仅分享相关代码位;这可能是您投反对票的原因
-
您在使用更新面板吗?您是在动态向网格中添加数据吗?
-
@NoviceProgrammer谢谢,我会稍微编辑一下。我想知道发生了什么事......而且没有更新面板,只有 Ajax Tab Container 和网格数据绑定到我的 sql 服务器
-
@NoviceProgrammer 重新编辑,现在只包含与按钮、其网格视图和页面加载相关的内容
标签: c# asp.net ajax button gridview