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

时间:2011-09-19 19:36:47

标签: c# javascript asp.net html

我收到此错误:

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>

我做错了什么?

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

17 个答案:

答案 0 :(得分:66)

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

<%@ Page EnableEventValidation="false" %>

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

我建议不要这样做。

答案 1 :(得分:31)

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

  

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

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

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

答案 2 :(得分:16)

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

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

答案 3 :(得分:15)

需要注意的另一件事是,如果你有一个嵌套的

,就会发生这个错误

Wait<WebDriver> wait = new FluentWait<WebDriver>(ctx.driver) .withTimeout(30, TimeUnit.SECONDS) .pollingEvery(5, TimeUnit.SECONDS) .ignoring(NoSuchElementException.class); wait.until((webDriver) -> { webDriver.navigate().refresh(); return driver.findElement(by); });

.Net表单中的

标记。

答案 4 :(得分:8)

我有一个与数据列表相同的问题我“动态绑定,添加EnableViewState =”false“安静错误消息。我想如果我以编程方式绑定,那么控件正在每个帖子上填充,视图如果每次回调可能会或者可能不会改变状态,则不需要维护状态,这就是我动态绑定它的原因,哈哈。

答案 5 :(得分:5)

此错误也可能是由母版页中的嵌套<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 :(得分:4)

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

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

答案 7 :(得分:4)

在首页添加

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

答案 8 :(得分:3)

啊,不幸的是啊。因为你添加它们本质上客户端asp.net爆炸了。同样不幸的是你必须关闭EventValidation,因为有一些重要的保护措施可以帮助(例如邪恶注入下拉框)。 另一种选择是制作你自己的复合控制,当然这似乎比所涉及的工作更多。我也要关闭事件验证,但要非常小心,你不相信页面中任何可能通过简单地改变它们而以坏方式使用的值 - 比如隐藏键,通过组合框输入sql等等。 / p>

答案 9 :(得分:2)

您还可以在prerender事件中填写数据。这样您就可以保持验证并保持安全。以下是使用转发器的示例。

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

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

答案 10 :(得分:1)

您可以添加ViewStateMode =&#34;已禁用&#34;

asp:UpdatePanel ID =&#34; UpdatePanel1&#34; RUNAT =&#34;服务器&#34; ViewStateMode =&#34;禁用&#34;

答案 11 :(得分:1)

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

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

我的installshield项目的某个地方已将其App池定义更改为使用&#34; 3&#34; (可能只是一次误点击或错误输入)。

答案 12 :(得分:1)

我的解决方案是添加:

ctlUpdatePanel.Update();

回发后绑定控件后。它是在Updatepanel中使用UpdateMode =&#34;条件&#34;属性。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

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

我刚刚在id =“form1”的表单中删除了带有id =“form2”的表单,问题就消失了。 这可能不是你的问题,但它可能是类似的东西。

答案 15 :(得分:0)

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

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

我的回发无效。

事实证明,数据中包含了回车换行符,当列表框中显示时,您无法看到它。

除了IE 10和IE 11之外,

在每个浏览器中都运行良好。

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

答案 16 :(得分:-3)

我的问题是我有嵌套的表单标签。移除内部后,为我解决。