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

Posted

技术标签:

【中文标题】asp.net:无效的回发或回调参数【英文标题】:asp.net: Invalid postback or callback argument 【发布时间】:2011-11-20 12:54:46 【问题描述】:

我收到此错误:

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"  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>

我做错了什么?

我在按下提交按钮后收到此错误。

【问题讨论】:

【参考方案1】:

在你的 aspx 文件中,你应该把第一行写成这样:

<%@ Page EnableEventValidation="false" %>

如果您已经有类似 &lt;%@ Page 的内容,那么只需添加其余内容 => EnableEventValidation="false" %&gt;

我建议不要这样做。

【讨论】:

这个答案是倒退的,EnableEventValidation="false" 是你的意思,我相信。 禁用事件验证(坏主意,因为您会失去一点安全性而代价很小)。 这是一个非常糟糕的主意 你为什么要发布一些你不推荐做的事情? @user1334007 因为这是对他问题的回答。女士确实提供了这个来防止这个错误。这并不意味着我同意。他们还添加了 sqldataadapter 。我会同意使用它吗?没有【参考方案2】:

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

此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件

您正在动态编辑 lstProblems 下拉列表,因此当您回发 ASP.NET 时会显示“警告!下拉列表中的条目无效!”并吓坏了抛出该错误。您必须确定关闭事件验证是否是一个好的解决方案,但我会在这样做之前对其进行研究,因为它背后的想法是免费让您的网站更加安全。

这是另一个 *** 答案,它比我更好地解释了该做什么: Invalid postback or callback argument. Event validation is enabled using '<pages enableEventValidation="true"/>'

【讨论】:

如何关闭验证?我没有编辑我只是从数据源添加一次的条目,就是这样 问题是你在客户端添加值。 ASP 知道它使用一组有效值将下拉菜单呈现给页面。客户端选择的值不包含在原始值集中,因此它假定用户破解了下拉列表以添加该值并停止处理页面。 但用户无法向其中添加值。为什么asp认为他增值了? 用户正在通过javascript添加值:$('#lstProblems').html(tmp);通过浏览器也有多种方式来操作 DOM,例如 IE 开发者工具、Chrome 中的 Inspect Element、Mozilla 中的 Firebug 等...【参考方案3】:

啊,真不幸。由于您添加它们本质上是客户端 asp.net 爆炸。不幸的是,您必须关闭 EventValidation,因为有一些重要的保护措施会有所帮助(例如将恶意注入到下拉框中)。 另一种选择是制作自己的复合控件,这当然看起来比所涉及的努力要多。我也可能会关闭事件验证,但要非常小心,不要相信页面中的任何值,这些值可能会通过简单地更改来以不良方式使用 - 例如隐藏键、通过组合框进行 sql 注入等。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

我遇到了同样的问题,两个列表框和两个按钮。

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

我收到了无效的回发。

原来是数据中有回车换行,当显示在列表框中时您看不到。

在除 IE 10 和 IE 11 之外的所有浏览器中都能正常工作。

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

在首页添加

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

【讨论】:

能否请您添加有关您提供的解决方案的更多详细信息?【参考方案9】:

我的解决方案是添加:

ctlUpdatePanel.Update();

在回发之后绑定控件之后。它在具有 UpdateMode="Conditional" 属性的更新面板中。

【讨论】:

【参考方案10】:

您还可以在预渲染事件中填写数据。通过这种方式,您可以保持验证并保持安全。这是一个使用中继器的示例。

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

        Repeater1.DataSource = users;
        Repeater1.DataBind();
      

【讨论】:

【参考方案11】:

这可能不是您的问题的原因,但我注意到您在下拉列表中使用了 optgroups,所以我认为如果有人遇到此问题,这可能会对他们有所帮助。对我来说,我需要创建一个可以使用 optgroups 呈现的下拉列表,我最终使用了已接受的答案 here,但是虽然它可以正确呈现控件,但它给了我这个错误。我的答案here 详细说明了我是如何过去的。

【讨论】:

【参考方案12】:

需要注意的另一件事是,如果您有嵌套的,则可能会发生此错误

&lt;form

.Net 表单中的标签。

【讨论】:

你今天赚了我 2 美分。 最佳答案,实话告诉你。 你是对的,那么如何预防呢?因为有时我们无法删除某些 CSS 样式的
标签
这对我有用。谢谢你。我的母版页中有一个,子页中有一个。【参考方案13】:

在远程服务器(生产、测试​​、qa、暂存等)上遇到此问题后,但在本地开发工作站上没有,我发现应用程序池配置的 RequestLimit 不是 0。

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

在某个地方,我的 installshield 项目将其应用程序池定义更改为使用“3”(可能只是误点击或误输入)。

【讨论】:

【参考方案14】:

这个错误也可能是由于母版页中嵌套的&lt;form&gt;标签是不允许的。

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

如果您选择了一个模板并从某处复制代码,这很可能是原因。

解决方案

你必须打破&lt;form&gt;标签的嵌套。下面应该变成

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

应该变成

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

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

【讨论】:

使用网络表单。花了一段时间才意识到这一点。 你是对的。但是您也没有提到任何解决方案,以防万一非常需要使用
标签。
@reaz 更新了答案。解决方案很明显。 form 标签不能嵌套。【参考方案15】:

由于从另一个页面复制粘贴,我遇到了类似的问题,我得到了什么:

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

我刚刚在 id="form1" 的表单中删除了 id="form2" 的表单并且问题消失了。 这可能不是您的问题,但可能是类似的问题。

【讨论】:

【参考方案16】:

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

【讨论】:

【参考方案17】:

您可以添加 ViewStateMode="Disabled"

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

【讨论】:

以上是关于asp.net:无效的回发或回调参数的主要内容,如果未能解决你的问题,请参考以下文章

Sys.WebForms.PageRequestManagerServerErrorException:无效的回发或回调参数

ajax省市联动 回发或回调参数无效 启用了事件验证。

回发或回调参数无效的各种情况分析及解决办法

javascript函数被asp.net中的回发覆盖

如何使用javascript在asp.net上停止正在进行的回发(长时间运行)?

asp.net如何把表单提交到别的页面而不是本页面,用POST方式