无效的回发或回调参数

本文关键字:回调 参数 无效 | 更新日期: 2023-09-27 18:09:15

我得到这个错误:

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>

我做错了什么?

我得到这个错误后,我按下提交按钮。

无效的回发或回调参数

在你的aspx文件中,你应该像这样放置第一行:

<%@ Page EnableEventValidation="false" %>

如果你已经有了像<%@ Page这样的内容那么就加上剩余的=> EnableEventValidation="false" %>

我建议不要这样做。

如果您查看文本的第一行,您可以收集到错误是什么。

此特性验证回发或回调事件的参数来自最初呈现它们的服务器控件

你正在动态编辑lstProblems下拉列表,所以当你发布回ASP。NET说"警告!下拉框中的无效条目!",然后抛出该错误。您必须确定关闭事件验证是否是一个好的解决方案,但我会在这样做之前进行研究,因为它背后的想法是使您的网站更安全免费。

这是另一个stackoverflow的答案,它比我更好地解释了该怎么做:无效的回发或回调参数。使用''

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

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

另一件要注意的事情是,如果您有嵌套的

,则可能发生此错误。

<form

标签。

我在动态绑定数据表时遇到了同样的问题,添加EnableViewState="false"使错误消息静音。我想如果我以编程方式绑定,那么控件将在每次回发时填充,视图状态不需要维护,如果它可能会或可能不会在每次回调时更改,这就是为什么我动态绑定它,哈哈。

此错误也可能是由于在母版页中嵌套<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>

添加到首页

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

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

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

啊,真不幸。因为你添加了它们,本质上是客户端asp.net爆炸了。同样不幸的是,你必须关闭EventValidation,因为有一些重要的保护可以帮助(例如恶意注入下拉框)。另一种选择是创建您自己的复合控件,当然,在这里这似乎需要更多的努力。我可能也会关闭事件验证,但要非常小心,不要相信任何可以通过简单地更改来以不良方式使用的页面值-例如隐藏键,通过组合框注入sql等。

您还可以在preender事件中填充数据。这样,您可以保持验证并保持安全。下面是一个使用中继器的例子。

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

我的解决方案是添加:

ctlUpdatePanel.Update();

在回发后绑定控件后。它是在updatepanel与UpdateMode="条件"属性。

在远程服务器(生产、测试、qa、登台等)上遇到这个问题后,而不是在本地开发工作站上,我发现应用程序池配置了一个RequestLimit而不是0。

这导致应用程序池放弃并以问题中所述的异常回复。

我的installshield项目将其应用程序池定义更改为使用"3"(可能只是误单击或键入错误)。

可以添加ViewStateMode="Disabled"

asp:UpdatePanel ID="UpdatePanel1" runat="server" ViewStateMode="Disabled"

我也有同样的问题,两个列表框和两个按钮。

列表框中的数据是从数据库中加载的,您可以通过单击按钮在框之间移动项。

我收到了一个无效的回发。

结果是数据中有回车换行符,在列表框中显示时看不到。

在除ie10和ie11以外的所有浏览器中都能正常工作。

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

这可能不是你的问题的原因,但我注意到你在你的下拉菜单中使用了optgroups,所以我想这可能会帮助一些人,他们应该在这里结束这个问题。对我来说,我需要创建一个下拉列表,将与optgroups渲染,我最终使用这里接受的答案,但虽然它会正确渲染控件,它给了我这个错误。我是如何克服的,在我的回答中有详细说明。

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

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

我只是删除了表单id="form2"内部表单id="form1"和问题消失了。这可能不是你的问题,但它可能是类似的东西。

我的问题是我有嵌套的表单标签。去掉内层后,为我算出了