asp.net:无效的回发或callback参数

我得到这个错误:

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) +8627417 System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +360 System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +13 System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +346 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1743 Version Information: Microsoft .NET Framework Version:2.0.50727.3623; ASP.NET Version:2.0.50727.3618 

这是什么意思?

这里是我的代码:

 <%@ Page EnableEventValidation="true" Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="EnterData.DataEntry.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title></title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js" type="text/javascript"></script> <link href="../niceforms/niceforms-default.css" rel="stylesheet" type="text/css" /> <script src="../niceforms/niceforms.js" type="text/javascript"></script> <link href="../jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" /> <style type="text/css"> .list-problems { height:600px !important; width:200px !important; display:inline-block; } </style> <script> jQuery(function($) { //$("#occurrence_dateTextBox").mask("99/99/9999"); //$("#<%= report_dateTextBox.ClientID %>").mask("99/99/9999"); $("#<%= occurrence_dateTextBox.ClientID %>").datepicker(); $("#<%= report_dateTextBox.ClientID %>").datepicker(); //$(".datepicker").datepicker(); }); $(function() { $.get('../file.txt', function(data) { var output = data.split('\n'), tmp = ''; for (i = 0; i < output.length; i++) { tmp += '<option value=' + output[i] + '>' + output[i] + '</option>'; } $('#lstProblems').html(tmp); }); }); $(function() { $("select").multiselect(); }); function getselectedproblems() { var selectedLanguages = new Array(); jQuery('#lstProblems option:selected').each(function() { selectedLanguages.push(jQuery(this).val()); }); } </script> </head> <body><div id="container"> <form id="form1" runat="server" class="niceform"> <fieldset> <legend>Section A</legend> <dl> <dt><label for="occurrence_dateTextBox" >Occurrence Date:</label></dt> <dd><asp:TextBox ID="occurrence_dateTextBox" runat="server" size="50"/></dd> </dl> <dl> <dt><label for="report_dateTextBox">Report Date:</label></dt> <dd><asp:TextBox ID="report_dateTextBox" runat="server" size="50"/></dd> </dl> <dl> <dt><label for="spec_idTextBox">Specimen ID:</label></dt> <dd><asp:TextBox ID="spec_idTextBox" runat="server" size="50"/></dd> </dl> <dl> <dt><label for="batch_idTextBox">Batch ID:</label></dt> <dd><asp:TextBox ID="batch_idTextBox" runat="server" size="50"/></dd> </dl> <dl> <dt><label for="report_byTextBox">Report By:</label></dt> <dd><asp:TextBox ID="report_byTextBox" runat="server" size="50"/></dd> </dl> <dl> <dt><label for="identified_byTextBox">Identified ID:</label></dt> <dd><asp:TextBox ID="identified_byTextBox" runat="server" size="50"/></dd> </dl> </fieldset> <fieldset> <legend>Section B</legend> <dl> <dt><label for="problemTextBox">Problem:</label></dt> <dd><asp:TextBox ID="problemTextBox" runat="server" size="50"/></dd> </dl> <dl> <dt><label for="lstProblems">Problems List:</label></dt> <dd> <asp:ListBox ID="lstProblems" runat="server" SelectionMode="Multiple" CssClass="list-problems"></asp:ListBox> </dd> </dl> <dl> <dd><select size="8" multiple="true" > <optgroup label="Europe"> <option>United Kingdom</option> <option>Luxembourg</option> </optgroup> <optgroup label="Asia"> <option>India</option> <option>Dubai</option> </optgroup> </select> </dd> </dl> <dl> <asp:ListBox ID="ListBox1" runat="server" DataSourceID="SqlDataSource1" DataTextField="batch" DataValueField="batch" SelectionMode="Multiple" Height="100px" Width="329px"></asp:ListBox> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:LOM %>" SelectCommand="SELECT [batch] FROM [lom_batch]"></asp:SqlDataSource> </dl> </fieldset> <fieldset> <legend>Section C</legend> <dl> <dt><label for="section_c_issue_error_identified_byTextBox">Issue/Error Identified By:</label></dt> <dd><asp:TextBox ID="section_c_issue_error_identified_byTextBox" runat="server" size="50"/></dd> </dl> <dl> <dt><label for="section_c_commentsTextBox">Comments:</label></dt> <dd><asp:TextBox ID="section_c_commentsTextBox" runat="server" size="50"/></dd> </dl> </fieldset> <fieldset> <legend>Section D</legend> <dl> <dt><label for="section_d_investigationTextBox">Investigation:</label></dt> <dd><asp:TextBox ID="section_d_investigationTextBox" runat="server" size="50"/></dd> </dl> </fieldset> <fieldset> <legend>Section E</legend> <dl> <dt><label for="section_e_corrective_actionTextBox">Corrective Action:</label></dt> <dd><asp:TextBox ID="section_e_corrective_actionTextBox" runat="server" height="200" TextMode="MultiLine" size="50"/></dd> </dl> </fieldset> <fieldset> <legend>Section F</legend> <dl> <dt><label for="section_f_commentsTextBox">Comments:</label></dt> <dd><asp:TextBox ID="section_f_commentsTextBox" runat="server" size="50"/></dd> </dl> </fieldset> <fieldset> <legend>Pre-Analytical</legend> <dl> <dt><label for="prePracticeCodeTextBox">Practice Code:</label></dt> <dd><asp:TextBox ID="prePracticeCodeTextBox" runat="server" Visible="false"/></dd> </dl> <dl> <dt><label for="preContactTextBox1">Contact:</label></dt> <dd><asp:TextBox ID="preContactTextBox" runat="server" Visible="false"/></dd> </dl> <dl> <dt><label for="CheckBox1">PreAnalytical?</label></dt> <dd> <asp:CheckBox ID="CheckBox1" runat="server" CausesValidation="false" Visible="true" AutoPostBack="true" OnCheckChanged="CheckBox1_CheckedChanged"/></dd> </dl> </fieldset> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="SubmitData" OnClientClick="JSfunction()"/> </form> </div></body> </html> 

我究竟做错了什么?

我收到这个错误后,我按提交button

非常感谢您的帮助!

在你的aspx文件中,你应该把第一行作为这个:

 <%@ Page EnableEventValidation="false" %> 

如果你已经有了像<%@ Page那么只需添加其余的=> EnableEventValidation="false" %>

我build议不要这样做。

如果你看第一行文字,你可以收集你的错误是什么。

此functionvalidation回发或callback事件的参数来自最初呈现它们的服务器控件

您正在dynamic编辑lstProblems下拉列表,因此当您回发ASP.NET时,将显示“Warning!Invalid entries in the dropdown!”。 并且怪异地抛出那个错误。 您必须确定closures事件validation是否是一个好的解决scheme,但是在做之前我会研究它,因为它背后的想法是使您的网站免费更安全。

这是另一个stackoverflow的答案,做得比我更好地解释要做什么: 无效的回发或callback参数。 事件validation使用'<pages enableEventValidation =“true”/>'

如果您的Page_Load()事件中有代码。 尝试添加这个:

 if (!Page.IsPostBack) { //your code here } 

另外要注意的是,如果你有一个嵌套的,这个错误可能会发生

<form

标记在.Net窗体中。

我有一个datalist我同样的问题,我dynamic绑定,添加EnableViewState =“false”静默的错误消息。我想如果我以编程方式绑定,然后控件正在每个post后面填充,视图状态不'如果每个callback都可能或不可以更改,那么这就是为什么我dynamic绑定它,哈哈。

这个错误也可能是由主页面中嵌套的<form>标签引起的,这是不允许的。

 <form id="someid"></form> 

这可能是原因,如果你拿起一个模板,并从某处复制代码。

你必须打破<form>标签的嵌套。 以下应该成为

 <form method="" name="form1"> <form method="" name="form2> </form> </form> 

应该成为

 <form method="" name="form1"> </form> <form method="" name="form2> </form> 

啊,不幸的。 由于你添加他们本质上客户端asp.net爆炸。 同样不幸的是,您必须closuresEventValidation,因为有一些重要的保护措施可以帮助(例如恶意注入下拉框)。 另一种select是制作自己的复合控件,这当然看起来比所涉及的工作要多一点。 我也许会closures事件validation,但要非常小心,您不要相信页面中的任何值,只要更改它们就可以使用,比如隐藏的键,通过combobox的sql注入等等。

如果将UseSubmitBehavior="True"更改为UseSubmitBehavior="False"问题将得到解决。

 <asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" /> 

添加在首页上

 protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //Code display data } } 

您也可以在prerender事件中填写您的数据。 这样你可以保持你的validation和保持安全。 这里是一个使用中继器的例子。

 protected void Page_PreRender(object sender, EventArgs e) { List<Objects.User> users = Application.User.GetAllUsers(); Repeater1.DataSource = users; Repeater1.DataBind(); } 

我的解决办法是补充:

 ctlUpdatePanel.Update(); 

回传后进行绑定控制。 它在UpdateMode =“Conditional”属性的updatepanel中。

我有同样的问题,两个列表框和两个button。

列表框中的数据正在从数据库中加载,您可以通过单击button在各个框之间移动项目。

我得到一个无效的回发。

事实certificate,这是数据有回车换行,你不能看到列表框中显示。

在IE 10和IE 11以外的浏览器中都能正常工作。

删除回车换行,一切正常。

这可能不是你的问题的原因,但我注意到你正在使用optgroups在你的下拉列表中,所以我认为这可能有助于某人应该在这里解决这个问题。 对于我来说,我需要创build一个可以使用optgroup进行渲染的下拉列表,并且我在这里使用了可接受的答案,但是在正确渲染控件的时候,却给了我这个错误。 我在这里的答案中详细说明了这一点 。

在远程服务器(生产,testing,qa,staging等)上,但在本地开发工作站上没有这个问题后,我发现应用程序池configuration了RequestLimit而不是0。

这导致应用程序池放弃并回答问题中提到的exception。

一路上,我的installshield项目的应用程序池定义更改为使用“3”(可能只是一个错误点击或错误types)。

我有一个类似的问题,因为从另一个页面复制粘贴,我得到了什么:

 <form id="form1" runat="server"> ... <form id="form2" runat="server"> .... </form> </form> 

我刚刚删除id =“form2”窗体内的id =“form1”的forms和问题消失了。 这可能不是你的问题,但可能是类似的东西。

你可以添加ViewStateMode =“Disabled”

asp:UpdatePanel ID =“UpdatePanel1”runat =“server”ViewStateMode =“Disabled”

我的问题是,我嵌套的forms标签。 删除内部之后,为我解决。