it-swarm.cn

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

我收到此错误:

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>

我究竟做错了什么?

按提交按钮后出现此错误。

43

在您的aspx文件中,应将第一行如下:

<%@ Page EnableEventValidation="false" %>

如果您已经有<%@ Page之类的东西,那么只需添加其余的=> EnableEventValidation="false" %>

我建议不要这样做。

67
Royi Namir

如果您查看文本的第一行,则可以了解错误所在。

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

您正在动态地编辑lstProblems下拉列表,因此当您回发ASP.NET时说:“警告!下拉列表中的无效条目!”并怪异地抛出该错误。您必须确定关闭事件验证是否是可以的解决方案,但是在进行此操作之前,我会对其进行研究,因为其背后的想法是使您的网站更加安全。

这是另一个stackoverflow答案,它比我做的要好得多: 无效的回发或回调参数。使用'<pages enableEventValidation =“ true” />'启用事件验证

31
Dave L

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

<form

.Net表单中的标记。

16
TheAlbear

如果您的Page_Load()事件中包含代码。尝试添加以下内容:

if (!Page.IsPostBack)
{ 
//your code here 
}
16
Syed Ali Taqi

我在动态绑定数据列表时遇到了同样的问题,添加EnableViewState =“ false”使错误消息安静了下来。我认为如果我是通过编程方式绑定的,则控件将填充在每个回发页面上,视图状态不会不必在每次回叫上更改它是否可以更改,这就是为什么我要动态绑定它,大声笑。

8
Corey

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

在首页添加

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

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

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

真不幸。由于您添加了它们,本质上是客户端asp.net崩溃了。同样不幸的是,您必须关闭EventValidation,因为有一些重要的保护措施可以帮助您(例如,将邪恶注入下拉框)。另一种选择是制作自己的复合控件,这当然比所涉及的工作还要多。我也可能会关闭事件验证,但要非常小心,以免您不信任页面中的任何值,这些值仅通过更改即可被不良使用,例如隐藏键,通过组合框的sql注入等。

3
Adam Tuliper - MSFT

您也可以在prerender事件中填充数据。这样,您可以保持验证并保持安全。这是使用中继器的示例。

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

        Repeater1.DataSource = users;
        Repeater1.DataBind();
      }
2
Pieter de Vries

您可以添加ViewStateMode =“ Disabled”

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

1
Jawad Siddiqui

在远程服务器(生产,测试,质量检查,登台等)上但在本地开发工作站上没有此问题后,我发现应用程序池配置了一个RequestLimit而不是0。

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

在我的installshield项目的应用程序池定义中,某处更改为使用“ 3”(可能只是单击错误或键入错误)。

1
StingyJack

我的解决方案是添加:

ctlUpdatePanel.Update();

在回发后绑定控件之后。它位于具有UpdateMode =“ Conditional”属性的updatepanel中。

1
Tone Škoda

这可能不是造成问题的原因,但我注意到您在下拉列表中使用了optgroups,因此我认为如果他们在此处遇到此问题,这可能会有所帮助。对我来说,我需要创建一个将与optgroup一起渲染的下拉列表,最后我使用了可接受的答案 here ,但是尽管它可以正确渲染控件,但它给了我这个错误。我的回答方式 这里 详细说明了我是如何克服的。

0
Doug F

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

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

我收到了无效的回发。

原来是数据中包含回车换行符的数据,在列表框中显示时看不到。

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

卸下笔架回送线,一切正常。

0
Nick B

我遇到了类似的问题,因为我从另一个页面粘贴了粘贴内容:

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

我只是删除了id =“ form1”内的表单,而问题消失了。这可能不是您的问题,但可能是类似的问题。

0
Eugene Bosikov